Add GNU LGPL headers to all .c .C and .h files
[oweals/cde.git] / cde / programs / dtprintinfo / UI / DtSetPref.C
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: DtSetPref.C /main/2 1995/07/17 14:04:26 drk $ */
24 /*                                                                      *
25  * (c) Copyright 1993, 1994 Hewlett-Packard Company                     *
26  * (c) Copyright 1993, 1994 International Business Machines Corp.       *
27  * (c) Copyright 1993, 1994 Sun Microsystems, Inc.                      *
28  * (c) Copyright 1993, 1994 Novell, Inc.                                *
29  */
30
31 #include "DtSetPref.h"
32 #include "DtMainW.h"
33 #include "DtFindD.h"
34 #include "IconObj.h"
35 #include "Group.h"
36 #include "LabelObj.h"
37 #include "Container.h"
38 #include "Application.h"
39
40 #include "dtprintinfomsg.h"
41
42 DtSetPref::DtSetPref(AnyUI *parent,
43                      char *name,
44                      AnyUI *container,
45                      PreferenceCallback callback,
46                      void *callback_data)
47         : Dialog(parent, name, MODELESS, false)
48 {
49    mainw = (DtMainW *) parent;
50    _has_been_posted = false;
51    _container = container;
52    _callback = callback;
53    _callback_data = callback_data;
54
55    // initialize previous values
56    _previous_style = container->IconView();
57    _previous_status_flag = true;
58    _previous_status_line = true;
59    _previous_show_only_mine = false;
60    _previous_show_details_label = true;
61    _previous_update_interval = 30;
62
63    view_group = new Group(this, MESSAGE(RepresentationL));
64    by_icon = new Button(view_group, MESSAGE(LargeIconL), TOGGLE_BUTTON,
65                         RepCB, this);
66    by_smallIcon = new Button(view_group, MESSAGE(SmallIconL), TOGGLE_BUTTON,
67                              RepCB, this);
68    by_name = new Button(view_group, MESSAGE(NameOnlyL), TOGGLE_BUTTON,
69                         RepCB, this);
70    by_properties = new Button(view_group, MESSAGE(DetailsL), TOGGLE_BUTTON,
71                               RepCB, this);
72    Container *form = new Container(view_group, "form", FORM);
73    show_labels = new Button(form, MESSAGE(ShowLabelsL), TOGGLE_BUTTON);
74    show_labels->Selected(true);
75    show_labels->Active(false);
76    show_labels->AttachTop();
77    show_labels->AttachBottom();
78    show_labels->AttachRight();
79    show_labels->AttachLeft(20);
80
81    show_jobs = new Group(this, MESSAGE(JobsToShowL));
82    only_mine = new Button(show_jobs, MESSAGE(OnlyMineL), TOGGLE_BUTTON);
83    everyones = new Button(show_jobs, MESSAGE(EveryoneL), TOGGLE_BUTTON);
84    everyones->Selected(true);
85
86    update_group = new Group(this, MESSAGE(UpdateIntervalL), FORM_BOX);
87    update_interval = new ScaleObj(update_group, MESSAGE(IntervalL),
88                                   30, 0, 5, 300, 5, HORIZONTAL_SCALE, true);
89    update_interval->AttachAll();
90    update_group->AttachRight();
91    update_group->AttachLeft();
92    update_group->AttachBottom();
93
94    status = new Group(this, MESSAGE(StatusL), CHECK_BOX);
95    status_flag = new Button(status, MESSAGE(ProblemFlagL), TOGGLE_BUTTON);
96    status_flag->Selected(true);
97    status_line = new Button(status, MESSAGE(InformationLineL), TOGGLE_BUTTON);
98    status_line->Selected(true);
99
100    status->AttachRight();
101    status->AttachLeft(view_group, 5);
102    status->AttachBottom(update_group, 5);
103
104    view_group->AttachBottom(update_group, 5);
105    show_jobs->AttachBottom(status, 5);
106
107    view_group->AttachLeft();
108    view_group->AttachTop();
109    show_jobs->AttachLeft(view_group, 5);
110    show_jobs->AttachRight();
111    show_jobs->AttachTop();
112
113    ok = new Button(this, MESSAGE(OKL), PUSH_BUTTON, OkCB, this);
114    apply = new Button(this, MESSAGE(ApplyL), PUSH_BUTTON, ApplyCB, this);
115    cancel = new Button(this, MESSAGE(CancelL), PUSH_BUTTON, CancelCB, this);
116    help = new Button(this, MESSAGE(HelpL), PUSH_BUTTON, HelpCB, this);
117
118    DefaultButton(ok);
119
120    Reset();
121 }
122
123 DtSetPref::~DtSetPref()
124 {
125    // Empty
126 }
127
128 boolean DtSetPref::SetVisiblity(boolean flag)
129 {
130    Dialog::SetVisiblity(flag);
131    if (_has_been_posted == false)
132     {
133       _has_been_posted = true;
134       CancelButton(cancel);
135     }
136    return true;
137 }
138
139 void DtSetPref::ShowOnlyMyJobs(boolean value)
140 {
141    only_mine->Selected(value);
142    everyones->Selected(value ? false : true);
143 }
144
145 void DtSetPref::Representation(IconStyle value)
146 {
147    by_name->Selected(false);
148    by_icon->Selected(false);
149    by_smallIcon->Selected(false);
150    by_properties->Selected(false);
151    switch (value)
152     {
153      case NAME_ONLY: by_name->Selected(true); break;
154      case LARGE_ICON: by_icon->Selected(true); break;
155      case SMALL_ICON: by_smallIcon->Selected(true); break;
156      case DETAILS: by_properties->Selected(true); break;
157     }
158    show_labels->Active(by_properties->Selected());
159 }
160
161 void DtSetPref::Reset()
162 {
163    Representation(_previous_style);
164    status_flag->Selected(_previous_status_flag);
165    status_line->Selected(_previous_status_line);
166    (void)update_interval->Value();
167    update_interval->Value(_previous_update_interval);
168    ShowOnlyMyJobs(_previous_show_only_mine);
169    show_labels->Selected(_previous_show_details_label);
170 }
171
172 static void TurnOffHourGlass(BaseUI *obj, void *data)
173 {
174    ((DtMainW *)obj)->WorkingCursor(false);
175    ((Container *)data)->EndUpdate();
176 }
177
178 void DtSetPref::Apply()
179 {
180    IconStyle style;
181    boolean add_timeout = false;
182
183    if (by_name->Selected())
184       style = NAME_ONLY;
185    else if (by_icon->Selected())
186       style = LARGE_ICON;
187    else if (by_smallIcon->Selected())
188       style = SMALL_ICON;
189    else if (by_properties->Selected())
190       style = DETAILS;
191    if (_previous_style != style)
192     {
193       if (mainw->PrinterAppMode() == PRINT_MANAGER)
194        {
195          mainw->WorkingCursor(true);
196          _container->BeginUpdate();
197          add_timeout = true;
198        }
199       _container->IconView(style);
200       if (_callback)
201        {
202          if (_previous_style == DETAILS)
203             (*_callback)(_callback_data, DETAILS_OFF, NULL);
204          else if (style == DETAILS)
205             (*_callback)(_callback_data, DETAILS_ON, NULL);
206        }
207       _previous_style = style;
208       if (_callback)
209        {
210          if (_previous_show_details_label)
211             (*_callback)(_callback_data, SHOW_DETAILS_LABEL_ON, NULL);
212          else
213             (*_callback)(_callback_data, SHOW_DETAILS_LABEL_OFF, NULL);
214        }
215     }
216
217    if (_previous_status_flag != status_flag->Selected())
218     {
219       _previous_status_flag = status_flag->Selected();
220       if (_callback)
221        {
222          if (_previous_status_flag)
223             (*_callback)(_callback_data, STATUS_FLAG_ON, NULL);
224          else
225             (*_callback)(_callback_data, STATUS_FLAG_OFF, NULL);
226        }
227     }
228    if (_previous_status_line != status_line->Selected())
229     {
230       _previous_status_line = status_line->Selected();
231       if (_callback)
232        {
233          if (_previous_status_line)
234             (*_callback)(_callback_data, STATUS_LINE_ON, NULL);
235          else
236             (*_callback)(_callback_data, STATUS_LINE_OFF, NULL);
237        }
238     }
239    if (_previous_show_only_mine != only_mine->Selected())
240     {
241       if (mainw->PrinterAppMode() == PRINT_MANAGER)
242        {
243          mainw->WorkingCursor(true);
244          _container->BeginUpdate();
245          add_timeout = true;
246        }
247       _previous_show_only_mine = only_mine->Selected();
248       if (_callback)
249        {
250          if (_previous_show_only_mine)
251             (*_callback)(_callback_data, SHOW_ONLY_MINE_ON, NULL);
252          else
253             (*_callback)(_callback_data, SHOW_ONLY_MINE_OFF, NULL);
254          if (_previous_show_details_label)
255             (*_callback)(_callback_data, SHOW_DETAILS_LABEL_ON, NULL);
256          else
257             (*_callback)(_callback_data, SHOW_DETAILS_LABEL_OFF, NULL);
258        }
259     }
260    if (_previous_show_details_label != show_labels->Selected())
261     {
262       _previous_show_details_label = show_labels->Selected();
263       if (_callback)
264        {
265          if (_previous_show_details_label)
266             (*_callback)(_callback_data, SHOW_DETAILS_LABEL_ON, NULL);
267          else
268             (*_callback)(_callback_data, SHOW_DETAILS_LABEL_OFF, NULL);
269        }
270     }
271    if (update_interval->Value() != _previous_update_interval)
272     {
273       _previous_update_interval = update_interval->Value();
274       if (_callback)
275          (*_callback)(_callback_data, UPDATE_INTERVAL_CHANGED,
276                      (char *) _previous_update_interval);
277     }
278    if (mainw->findD)
279       mainw->findD->UpdateMatchAnyUser();
280    if (add_timeout)
281       mainw->AddTimeOut(TurnOffHourGlass, _container, 1500);
282 }
283
284 void DtSetPref::OkCB(void *data)
285 {
286    DtSetPref *obj = (DtSetPref *) data;
287    
288    obj->Apply();
289    obj->Visible(false);
290 }
291
292 void DtSetPref::Cancel()
293 {
294    Reset();
295    Visible(false);
296 }
297
298 void DtSetPref::CancelCB(void *data)
299 {
300    DtSetPref *obj = (DtSetPref *) data;
301    
302    obj->Cancel();
303 }
304
305 void DtSetPref::CloseCB()
306 {
307    Cancel();
308 }
309
310 void DtSetPref::ApplyCB(void *data)
311 {
312    DtSetPref *obj = (DtSetPref *) data;
313
314    obj->Apply();
315 }
316
317 void DtSetPref::HelpCB(void *data)
318 {
319    DtSetPref *obj = (DtSetPref *) data;
320    obj->HandleHelpRequest();
321 }
322
323 void DtSetPref::RepCB(void *data)
324 {
325    DtSetPref *obj = (DtSetPref *) data;
326    obj->show_labels->Active(obj->by_properties->Selected());
327 }
328
329 boolean DtSetPref::HandleHelpRequest()
330 {
331    mainw->DisplayHelp("SetOptionsDE");
332    return true;
333 }
334