93
/* transfer permission data from memory to panel buttons */
91
setPermissions(_Panel *panel)
95
showPermissions(_Panel *panel)
94
if(panel->currentPerm & S_IRUSR)
98
if (panel->currentPerm & S_IRUSR)
95
99
WMSetButtonSelected(panel->permBtn[0][0], 1);
97
101
WMSetButtonSelected(panel->permBtn[0][0], 0);
99
if(panel->currentPerm & S_IWUSR)
103
if (panel->currentPerm & S_IWUSR)
100
104
WMSetButtonSelected(panel->permBtn[1][0], 1);
102
106
WMSetButtonSelected(panel->permBtn[1][0], 0);
103
if(panel->currentPerm & S_IXUSR)
107
if (panel->currentPerm & S_IXUSR)
104
108
WMSetButtonSelected(panel->permBtn[2][0], 1);
106
110
WMSetButtonSelected(panel->permBtn[2][0], 0);
107
if(panel->currentPerm & S_IRGRP)
111
if (panel->currentPerm & S_IRGRP)
108
112
WMSetButtonSelected(panel->permBtn[0][1], 1);
110
114
WMSetButtonSelected(panel->permBtn[0][1], 0);
111
if(panel->currentPerm & S_IWGRP)
115
if (panel->currentPerm & S_IWGRP)
112
116
WMSetButtonSelected(panel->permBtn[1][1], 1);
114
118
WMSetButtonSelected(panel->permBtn[1][1], 0);
115
if(panel->currentPerm & S_IXGRP)
119
if (panel->currentPerm & S_IXGRP)
116
120
WMSetButtonSelected(panel->permBtn[2][1], 1);
118
122
WMSetButtonSelected(panel->permBtn[2][1], 0);
119
if(panel->currentPerm & S_IROTH)
123
if (panel->currentPerm & S_IROTH)
120
124
WMSetButtonSelected(panel->permBtn[0][2], 1);
122
126
WMSetButtonSelected(panel->permBtn[0][2], 0);
123
if(panel->currentPerm & S_IWOTH)
127
if (panel->currentPerm & S_IWOTH)
124
128
WMSetButtonSelected(panel->permBtn[1][2], 1);
126
130
WMSetButtonSelected(panel->permBtn[1][2], 0);
127
if(panel->currentPerm & S_IXOTH)
131
if (panel->currentPerm & S_IXOTH)
128
132
WMSetButtonSelected(panel->permBtn[2][2], 1);
130
134
WMSetButtonSelected(panel->permBtn[2][2], 0);
138
/* store permission data from file to memory */
135
initPermissions(_Panel *panel, struct stat *st)
140
setPermissions(_Panel *panel, struct stat *st)
138
142
panel->currentPerm &= 0;
140
if(st->st_mode & S_IRUSR)
144
if (st->st_mode & S_IRUSR)
141
145
panel->currentPerm |= S_IRUSR;
142
if(st->st_mode & S_IWUSR)
146
if (st->st_mode & S_IWUSR)
143
147
panel->currentPerm |= S_IWUSR;
144
if(st->st_mode & S_IXUSR)
148
if (st->st_mode & S_IXUSR)
145
149
panel->currentPerm |= S_IXUSR;
146
if(st->st_mode & S_IRGRP)
150
if (st->st_mode & S_IRGRP)
147
151
panel->currentPerm |= S_IRGRP;
148
if(st->st_mode & S_IWGRP)
152
if (st->st_mode & S_IWGRP)
149
153
panel->currentPerm |= S_IWGRP;
150
if(st->st_mode & S_IXGRP)
154
if (st->st_mode & S_IXGRP)
151
155
panel->currentPerm |= S_IXGRP;
152
if(st->st_mode & S_IROTH)
156
if (st->st_mode & S_IROTH)
153
157
panel->currentPerm |= S_IROTH;
154
if(st->st_mode & S_IWOTH)
158
if (st->st_mode & S_IWOTH)
155
159
panel->currentPerm |= S_IWOTH;
156
if(st->st_mode & S_IXOTH)
160
if (st->st_mode & S_IXOTH)
157
161
panel->currentPerm |= S_IXOTH;
159
setPermissions(panel);
163
showPermissions(panel);
166
/* read permissions */
163
168
showData(_Panel *panel)
168
173
struct passwd *psswd;
169
174
struct group *grp;
171
177
st = (struct stat *) wmalloc(sizeof(struct stat));
173
179
pathname = (char *) wmalloc(strlen(panel->fileInfo->path)+
174
180
strlen(panel->fileInfo->name)+1);
175
181
strcpy(pathname, panel->fileInfo->path);
176
if(panel->fileInfo->fileType != ROOT)
182
if (panel->fileInfo->fileType != ROOT)
177
183
strcat(pathname, panel->fileInfo->name);
179
185
/* get information of a file represented by pathname */
180
if (stat(pathname, st) == -1)
181
wwarning("%s %d: Stat Error", __FILE__, __LINE__);
186
/* lstat shows the link information (was: stat)*/
187
if (lstat(pathname, st) == -1)
188
wwarning(_("%s %d: lstat Error"), __FILE__, __LINE__);
184
191
SetTimeStampWithTimeT(panel->stamp, (int) st->st_mtime);
186
initPermissions(panel, st);
192
/* should only be called first time, not with revert button */
193
setPermissions(panel, st);
188
195
grp = getgrgid(st->st_gid);
190
197
WMSetLabelText(panel->groupLabel, grp->gr_name);
192
199
psswd = getpwuid(st->st_uid);
194
201
WMSetLabelText(panel->ownerLabel, psswd->pw_name);
196
sprintf(buf, "%d Bytes\n", (int)st->st_size);
203
/* Directory sizes have to be calculated
204
if (S_ISLNK(st->st_mode))
205
WMSetLabelText(panel->sizeLabel, "");
208
if (st->st_size >= 10240) { /* 10240 Bytes -> 10.0 KB */
209
if (st->st_size > (1024*1024)) {
210
double fsize = st->st_size/(1024.0*1024.0);
211
sprintf(buf, _("%'.1lf MB\n"), fsize);
214
double fsize = st->st_size/1024.0;
215
sprintf(buf, _("%'.1lf KB\n"), fsize);
219
sprintf(buf, _("%d Bytes\n"), (int)st->st_size);
197
220
WMSetLabelText(panel->sizeLabel, buf);
199
if(S_ISLNK(st->st_mode))
201
readlink(pathname, buf, sizeof(buf));
223
if (S_ISLNK(st->st_mode)) {
224
count = readlink(pathname, buf, sizeof(buf));
228
/* terminate pathname string */
202
230
WMSetLabelText(panel->linkLabel, buf);
231
/* Set text color to black */
232
WMSetLabelTextColor(panel->linkToLabel,
233
WMBlackColor(WMWidgetScreen(panel->win)));
234
/* what to do with very long pathnames (wrap?) */
238
/* linkLabel keeps text when inspector rereads with Alt-i */
239
WMSetLabelText(panel->linkLabel, "");
240
/* Set text color to darkgrey */
241
WMSetLabelTextColor(panel->linkToLabel,
242
WMDarkGrayColor(WMWidgetScreen(panel->win)));
255
/* transfer permission data from panel to memory */
218
257
storeData(_Panel *panel)
302
/* Panel-Design - Label section
304
Layout: | | Label | | Label | |
305
Size [px]: |4| adjusted |4| WIDTH - 12 - adjusted |4|
306
->| | | | | |<- = WIDTH
308
Labels on the left side fit to the text width of the largest text,
309
to make translations easier.
264
createLinkLabels(_Panel *panel)
313
createLabels(_Panel *panel)
268
l = WMCreateLabel(panel->frame);
269
WMResizeWidget(l, 50, 16);
270
WMMoveWidget(l, 4, 16);
271
WMSetLabelText(l, "Link To:");
272
WMSetLabelTextAlignment(l, WARight);
273
WMSetLabelRelief(l, WRFlat);
274
WMSetLabelTextColor(l, WMDarkGrayColor(WMWidgetScreen(panel->win)));
315
WMLabel *sl, *ol, *gl;
320
panel->linkToLabel = WMCreateLabel(panel->frame);
321
WMMoveWidget(panel->linkToLabel, 6, 18);
322
WMSetLabelText(panel->linkToLabel, _("Link To:"));
323
WMSetLabelTextAlignment(panel->linkToLabel, WARight);
324
WMSetLabelRelief(panel->linkToLabel, WRFlat);
325
WMSetLabelTextColor(panel->linkToLabel,
326
WMDarkGrayColor(WMWidgetScreen(panel->win)));
328
scr = WMWidgetScreen(panel->win);
329
if (scr->normalFont) {
330
tw = WMWidthOfString(scr->normalFont,
331
WMGetLabelText(panel->linkToLabel),
332
strlen(WMGetLabelText(panel->linkToLabel)));
340
sl = WMCreateLabel(panel->frame);
341
WMMoveWidget(sl, 6, 56);
342
WMSetLabelText(sl, _("Size:"));
343
WMSetLabelTextAlignment(sl, WARight);
344
WMSetLabelRelief(sl, WRFlat);
345
if (scr->normalFont) {
346
tw = WMWidthOfString(scr->normalFont, WMGetLabelText(sl),
347
strlen(WMGetLabelText(sl)));
352
if (tw > maxLW) { maxLW =tw; }
355
ol = WMCreateLabel(panel->frame);
356
WMMoveWidget(ol, 6, 86);
357
WMSetLabelText(ol, _("Owner:"));
358
WMSetLabelTextAlignment(ol, WARight);
359
WMSetLabelRelief(ol, WRFlat);
360
if (scr->normalFont) {
361
tw = WMWidthOfString(scr->normalFont, WMGetLabelText(ol),
362
strlen(WMGetLabelText(ol)));
367
if (tw > maxLW) { maxLW = tw; }
370
gl = WMCreateLabel(panel->frame);
371
WMMoveWidget(gl, 6, 116);
372
WMSetLabelText(gl, _("Group:"));
373
WMSetLabelTextAlignment(gl, WARight);
374
WMSetLabelRelief(gl, WRFlat);
375
if (scr->normalFont) {
376
tw = WMWidthOfString(scr->normalFont, WMGetLabelText(gl),
377
strlen(WMGetLabelText(gl)));
382
if (tw > maxLW) { maxLW = tw; }
383
/* now we have the real maxLW */
385
WMResizeWidget(panel->linkToLabel, maxLW, LABEL_HEIGHT);
386
WMResizeWidget(sl, maxLW, LABEL_HEIGHT);
387
WMResizeWidget(ol, maxLW, LABEL_HEIGHT);
388
WMResizeWidget(gl, maxLW, LABEL_HEIGHT);
390
/* the text of this label is set in "showData()" */
276
391
panel->linkLabel = WMCreateLabel(panel->frame);
277
WMResizeWidget(panel->linkLabel, PERM_WIDTH-LABEL_WIDTH-10, 16);
278
WMMoveWidget(panel->linkLabel, LABEL_WIDTH+2, 16);
279
/* WMSetLabelText(panel->linkLabel, "Link:"); */
392
WMSetLabelWraps(panel->linkLabel, 1);
393
/* this label needs space for wraping long pathnames */
394
WMResizeWidget(panel->linkLabel, WIDTH-maxLW-12, LABEL_HEIGHT*3);
395
WMMoveWidget(panel->linkLabel, maxLW+4, 2);
280
396
WMSetLabelRelief(panel->linkLabel, WRFlat);
285
createSizeLabels(_Panel *panel)
289
l = WMCreateLabel(panel->frame);
290
WMResizeWidget(l, 48, 16);
291
WMMoveWidget(l, 4, 56);
292
WMSetLabelText(l, "Size:");
293
WMSetLabelTextAlignment(l, WARight);
294
WMSetLabelRelief(l, WRFlat);
296
398
panel->sizeLabel = WMCreateLabel(panel->frame);
297
WMResizeWidget(panel->sizeLabel, PERM_WIDTH-LABEL_WIDTH-10, 16);
298
WMMoveWidget(panel->sizeLabel, LABEL_WIDTH+2, 56);
299
/* WMSetLabelText(panel->sizeLabel, "Size"); */
399
WMResizeWidget(panel->sizeLabel, PERM_WIDTH-maxLW, LABEL_HEIGHT);
400
WMMoveWidget(panel->sizeLabel, maxLW+4, 56);
300
401
WMSetLabelRelief(panel->sizeLabel, WRFlat);
305
createOwnerLabels(_Panel *panel)
309
l = WMCreateLabel(panel->frame);
310
WMResizeWidget(l, LABEL_WIDTH, LABEL_HEIGHT);
311
WMMoveWidget(l, 4, 86);
312
WMSetLabelText(l, "Owner:");
313
WMSetLabelTextAlignment(l, WARight);
314
WMSetLabelRelief(l, WRFlat);
316
403
panel->ownerLabel = WMCreateLabel(panel->frame);
317
WMResizeWidget(panel->ownerLabel, PERM_WIDTH-LABEL_WIDTH-10, LABEL_HEIGHT);
318
WMMoveWidget(panel->ownerLabel, LABEL_WIDTH+2, 86);
319
/* WMSetLabelText(panel->ownerLabel, "Owner"); */
404
WMResizeWidget(panel->ownerLabel, PERM_WIDTH-maxLW, LABEL_HEIGHT);
405
WMMoveWidget(panel->ownerLabel, maxLW+4, 86);
320
406
WMSetLabelRelief(panel->ownerLabel, WRFlat);
325
createGroupLabels(_Panel *panel)
329
l = WMCreateLabel(panel->frame);
330
WMResizeWidget(l, LABEL_WIDTH, LABEL_HEIGHT);
331
WMMoveWidget(l, 4, 116);
332
WMSetLabelText(l, "Group:");
333
WMSetLabelTextAlignment(l, WARight);
334
WMSetLabelRelief(l, WRFlat);
336
408
panel->groupLabel = WMCreateLabel(panel->frame);
337
WMResizeWidget(panel->groupLabel, PERM_WIDTH-LABEL_WIDTH-10, LABEL_HEIGHT);
338
WMMoveWidget(panel->groupLabel, LABEL_WIDTH+2, 116);
409
WMResizeWidget(panel->groupLabel, PERM_WIDTH-maxLW, LABEL_HEIGHT);
410
WMMoveWidget(panel->groupLabel, maxLW+4, 116);
339
411
WMSetLabelRelief(panel->groupLabel, WRFlat);
416
buttonClick(WMWidget *self, void *data)
418
_Panel *panel = (_Panel *)data;
420
/* okButton sets the new file attributes */
421
if ((WMButton *)self == panel->okBtn)
424
WMSetButtonEnabled(panel->okBtn, False);
425
WMSetButtonEnabled(panel->revertBtn, True);
427
/* revertButton resets the old file attributes */
428
else { /* revert button clicked */
429
if ((WMButton *)self == panel->revertBtn) {
430
showPermissions(panel);
432
WMSetButtonEnabled(panel->okBtn, False);
433
WMSetButtonEnabled(panel->revertBtn, False);
435
/* permission buttons only aktivate the okButton */
436
else { /* permission button clicked */
437
WMSetButtonEnabled(panel->okBtn, True);
344
443
fillPermissionsFrame(WMScreen *scr, _Panel *panel, int x, int y,
345
444
int row, int col)
426
buttonClick(WMWidget *self, void *data)
428
_Panel *panel = (_Panel *)data;
430
if ((WMButton *)self == panel->okBtn)
434
/* WMSetButtonEnabled(panel->okBtn, False); */
435
/* WMSetButtonEnabled(panel->revertBtn, True); */
439
setPermissions(panel);
440
/* WMSetButtonEnabled(panel->okBtn, True); */
441
/* WMSetButtonEnabled(panel->revertBtn, False); */
446
526
createButtons(_Panel *panel)
449
528
panel->revertBtn = WMCreateCommandButton(panel->frame);
450
529
WMMoveWidget(panel->revertBtn, 16, HEIGHT-24);
451
530
WMResizeWidget(panel->revertBtn, 115, 24);
452
WMSetButtonText(panel->revertBtn, "Revert");
453
WMSetButtonEnabled(panel->revertBtn, True);
531
WMSetButtonText(panel->revertBtn, _("Revert"));
532
WMSetButtonEnabled(panel->revertBtn, False);
454
533
WMSetButtonAction(panel->revertBtn, buttonClick, panel);
456
535
panel->okBtn = WMCreateCommandButton(panel->frame);
457
536
WMMoveWidget(panel->okBtn, 140, HEIGHT-24);
458
537
WMResizeWidget(panel->okBtn, 115, 24);
459
WMSetButtonText(panel->okBtn, "OK");
538
WMSetButtonText(panel->okBtn, _("OK"));
460
539
WMSetButtonImage(panel->okBtn,
461
540
WMGetSystemPixmap(WMWidgetScreen(panel->win),
462
541
WSIReturnArrow));