mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
530a815246
Implemented dialog for icon properties. EDEBUG, EWARNING, EASSERT replaced with E_DEBUG, E_WARNING, E_ASSERT ehelp: Imported ehelp. It is meant for displaying ede help or some of documented programs in the browser, no matter where help is installed. Remanining thing is to be added in configure script so it can set correct paths, when configure be written. Documented ehelp.
197 lines
5.1 KiB
C++
197 lines
5.1 KiB
C++
/*
|
|
* $Id$
|
|
*
|
|
* Eiconman, desktop and icon manager
|
|
* Part of Equinox Desktop Environment (EDE).
|
|
* Copyright (c) 2008 EDE Authors.
|
|
*
|
|
* This program is licensed under terms of the
|
|
* GNU General Public License version 2 or newer.
|
|
* See COPYING for details.
|
|
*/
|
|
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <unistd.h>
|
|
#include <time.h>
|
|
#include <stdio.h>
|
|
|
|
#include <FL/Fl.h>
|
|
#include <FL/Fl_Tabs.h>
|
|
#include <FL/Fl_Group.h>
|
|
#include <FL/Fl_Button.h>
|
|
#include <FL/Fl_Input.h>
|
|
#include <FL/Fl_Output.h>
|
|
#include <FL/Fl_Shared_Image.h>
|
|
|
|
#include <edelib/Nls.h>
|
|
#include <edelib/Window.h>
|
|
#include <edelib/IconTheme.h>
|
|
#include <edelib/MimeType.h>
|
|
#include <edelib/IconChooser.h>
|
|
|
|
#include "IconProperties.h"
|
|
#include "DesktopIcon.h"
|
|
|
|
struct DesktopIconData {
|
|
Fl_Image* image;
|
|
const char* label;
|
|
const char* location;
|
|
|
|
edelib::String time_access;
|
|
edelib::String time_mod;
|
|
edelib::String type;
|
|
edelib::String size;
|
|
};
|
|
|
|
static void close_cb(Fl_Widget*, void* w) {
|
|
Fl_Window* win = (Fl_Window*)w;
|
|
win->hide();
|
|
}
|
|
|
|
static void ok_cb(Fl_Widget*, void* w) {
|
|
close_cb(0, w);
|
|
}
|
|
|
|
static void icon_change_cb(Fl_Button* b, void* d) {
|
|
DesktopIconData* data = (DesktopIconData*)d;
|
|
|
|
edelib::String ret = edelib::icon_chooser(edelib::ICON_SIZE_HUGE);
|
|
if(ret.empty())
|
|
return;
|
|
|
|
Fl_Image* img = Fl_Shared_Image::get(ret.c_str());
|
|
if(!img)
|
|
return;
|
|
b->image(img);
|
|
b->redraw();
|
|
}
|
|
|
|
static void study_and_fill(DesktopIcon* dicon, DesktopIconData* data) {
|
|
// get image and scale it if needed
|
|
if(dicon->image()) {
|
|
int iw = dicon->w();
|
|
int ih = dicon->h();
|
|
|
|
if(iw > 64 || ih > 64) {
|
|
data->image = dicon->image()->copy((iw > 64) ? 64 : iw,
|
|
(ih > 64) ? 64 : ih);
|
|
} else {
|
|
data->image = dicon->image();
|
|
}
|
|
}
|
|
|
|
data->label = dicon->label();
|
|
|
|
const char* prog_path = dicon->path().c_str();
|
|
edelib::MimeType mt;
|
|
if(mt.set(prog_path))
|
|
data->type = mt.comment();
|
|
else
|
|
data->type = "(unknown)";
|
|
|
|
data->location = prog_path;
|
|
|
|
// now get size, access and modification times
|
|
struct stat st;
|
|
if(stat(prog_path, &st) == -1) {
|
|
data->size = "(unknown)";
|
|
data->time_access = "(unknown)";
|
|
data->time_mod = "(unknown)";
|
|
} else {
|
|
char buff[128];
|
|
|
|
snprintf(buff, sizeof(buff), "%lu Bytes", st.st_size);
|
|
data->size = buff;
|
|
|
|
strftime(buff, sizeof(buff), "%F %H:%S", localtime(&st.st_atime));
|
|
data->time_access = buff;
|
|
|
|
strftime(buff, sizeof(buff), "%F %H:%S", localtime(&st.st_mtime));
|
|
data->time_mod = buff;
|
|
}
|
|
}
|
|
|
|
void show_icon_properties_dialog(DesktopIcon* dicon) {
|
|
// fetch usefull data
|
|
DesktopIconData data;
|
|
study_and_fill(dicon, &data);
|
|
|
|
// now construct dialog and fill it
|
|
edelib::Window* win = new edelib::Window(315, 395, _("Icon properties"));
|
|
win->begin();
|
|
Fl_Tabs* tabs = new Fl_Tabs(10, 10, 295, 340);
|
|
tabs->begin();
|
|
Fl_Group* g1 = new Fl_Group(15, 35, 285, 310, _("General"));
|
|
g1->begin();
|
|
Fl_Button* icon_button = new Fl_Button(20, 50, 75, 75);
|
|
icon_button->image(data.image);
|
|
icon_button->callback((Fl_Callback*)icon_change_cb, &data);
|
|
icon_button->tooltip(_("Click to change icon"));
|
|
|
|
Fl_Input* prog_name = new Fl_Input(100, 75, 195, 25);
|
|
prog_name->value(data.label);
|
|
|
|
Fl_Output* prog_mime = new Fl_Output(100, 150, 195, 25, _("Type:"));
|
|
prog_mime->box(FL_FLAT_BOX);
|
|
prog_mime->color(FL_BACKGROUND_COLOR);
|
|
prog_mime->value(data.type.c_str());
|
|
|
|
Fl_Output* prog_location = new Fl_Output(100, 180, 195, 25, _("Location:"));
|
|
prog_location->box(FL_FLAT_BOX);
|
|
prog_location->color(FL_BACKGROUND_COLOR);
|
|
prog_location->value(data.location);
|
|
|
|
Fl_Output* prog_size = new Fl_Output(100, 210, 195, 25, _("Size:"));
|
|
prog_size->box(FL_FLAT_BOX);
|
|
prog_size->color(FL_BACKGROUND_COLOR);
|
|
prog_size->value(data.size.c_str());
|
|
|
|
Fl_Output* prog_date_mod = new Fl_Output(100, 240, 195, 25, _("Modified:"));
|
|
prog_date_mod->box(FL_FLAT_BOX);
|
|
prog_date_mod->color(FL_BACKGROUND_COLOR);
|
|
prog_date_mod->value(data.time_mod.c_str());
|
|
|
|
Fl_Output* prog_date_acessed = new Fl_Output(100, 270, 195, 25, "Accessed:");
|
|
prog_date_acessed->box(FL_FLAT_BOX);
|
|
prog_date_acessed->color(FL_BACKGROUND_COLOR);
|
|
prog_date_acessed->value(data.time_access.c_str());
|
|
g1->end();
|
|
|
|
Fl_Group* g2 = new Fl_Group(15, 35, 285, 310, _("URL"));
|
|
g2->hide();
|
|
g2->begin();
|
|
Fl_Input* prog_url = new Fl_Input(20, 65, 245, 25, _("URL:"));
|
|
prog_url->align(FL_ALIGN_TOP_LEFT);
|
|
|
|
Fl_Button* prog_browse = new Fl_Button(270, 65, 25, 25);
|
|
prog_browse->tooltip(_("Browse location"));
|
|
|
|
// find icon for browse button
|
|
edelib::String ii = edelib::IconTheme::get("document-open", edelib::ICON_SIZE_TINY);
|
|
if(ii.empty())
|
|
prog_browse->label("...");
|
|
else {
|
|
Fl_Image* ii_img = Fl_Shared_Image::get(ii.c_str());
|
|
if(ii_img)
|
|
prog_browse->image(ii_img);
|
|
else
|
|
prog_browse->label("...");
|
|
}
|
|
|
|
g2->end();
|
|
tabs->end();
|
|
|
|
Fl_Button* ok_button = new Fl_Button(120, 360, 90, 25, _("&OK"));
|
|
ok_button->callback(ok_cb, win);
|
|
Fl_Button* cancel_button = new Fl_Button(215, 360, 90, 25, _("&Cancel"));
|
|
cancel_button->callback(close_cb, win);
|
|
win->end();
|
|
|
|
win->init(edelib::WIN_INIT_ALL);
|
|
win->show();
|
|
|
|
while(win->shown())
|
|
Fl::wait();
|
|
}
|