diff --git a/econtrol/econtrol.cpp b/econtrol/econtrol.cpp index 7cad630..a837933 100644 --- a/econtrol/econtrol.cpp +++ b/econtrol/econtrol.cpp @@ -1,41 +1,71 @@ - -#include "econtrol.h" +/* + * $Id$ + * + * Econtrol, control panel for EDE + * 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 #include #include +#include +#include +#include #include +#include +#include #include +#include +#include #include #include -using namespace edelib; +typedef edelib::list StrList; +typedef edelib::list::iterator StrListIter; -ControlButton::ControlButton(Fl_Box* t, String tv, int x, int y, int w, int h, const char* l) : -Fl_Button(x, y, w, h, l) { - tip = t; - tipval = tv; - box(FL_FLAT_BOX); - align(FL_ALIGN_WRAP); - color(FL_WHITE); -} +class ControlButton : public Fl_Button { + private: + Fl_Box* tipbox; + edelib::String tipstr; + edelib::String exec; + public: + ControlButton(Fl_Box* t, const edelib::String& ts, int x, int y, int w, int h, const char* l = 0) : + Fl_Button(x, y, w, h, l), tipbox(t), tipstr(ts) { + box(FL_FLAT_BOX); + align(FL_ALIGN_WRAP); + color(FL_BACKGROUND2_COLOR); + } -ControlButton::~ControlButton() { -} + ~ControlButton() { } + int handle(int event); +}; int ControlButton::handle(int event) { switch(event) { case FL_ENTER: - tip->label(tipval.c_str()); + tipbox->label(tipstr.c_str()); return 1; case FL_LEAVE: - tip->label(""); + tipbox->label(""); return 1; case FL_PUSH: - return 1; + box(FL_DOWN_BOX); + redraw(); + + if(Fl::event_clicks()) + edelib::message("Executing programs not implemented yet"); + + return 0; case FL_RELEASE: - return 1; + box(FL_FLAT_BOX); + redraw(); + return 0; default: return Fl_Button::handle(event); } @@ -43,25 +73,12 @@ int ControlButton::handle(int event) { } void close_cb(Fl_Widget*, void* w) { - ControlWin* cw = (ControlWin*)w; - cw->do_close(); + Fl_Window* win = (Fl_Window*)w; + win->hide(); } -ControlWin::ControlWin(const char* title, int w, int h) : Fl_Window(w, h, title) { - - IconTheme::init("edeneu"); - - fl_register_images(); - load_icons(); - init(); -} - -ControlWin::~ControlWin() { - IconTheme::shutdown(); -} - -void ControlWin::load_icons(void) { - Config c; +void load_buttons(Fl_Group* g, Fl_Box* tipbox) { + edelib::Config c; if(!c.load("econtrol.conf")) { EWARNING("Can't load config\n"); @@ -74,99 +91,93 @@ void ControlWin::load_icons(void) { return; } - list spl; - list::iterator it, it_end; - stringtok(spl, buff, ","); - + StrList spl; + // get sections + edelib::stringtok(spl, buff, ","); if(spl.empty()) return; - const char* sect; - ControlIcon cicon; - it = spl.begin(); - it_end = spl.end(); + bool abspath; + const char* section; + //ControlIcon cicon; + StrListIter it = spl.begin(), it_end = spl.end(); + edelib::String name, tip, exec; for(; it != it_end; ++it) { - sect = (*it).c_str(); - str_trim((char*)sect); + section = (*it).c_str(); + edelib::str_trim((char*)section); - if(c.get(sect, "Name", buff, sizeof(buff))) - cicon.name = buff; + if(c.get(section, "Name", buff, sizeof(buff))) + name = buff; else { - EWARNING("No %s, skipping...\n", sect); + EWARNING("No %s, skipping...\n", section); continue; } - if(c.get(sect, "Tip", buff, sizeof(buff))) - cicon.tip = buff; - if(c.get(sect, "Exec", buff, sizeof(buff))) - cicon.exec = buff; - if(c.get(sect, "Icon", buff, sizeof(buff))) { - cicon.icon = buff; - EDEBUG("setting icon (%s): %s\n", sect, cicon.icon.c_str()); + if(c.get(section, "Tip", buff, sizeof(buff))) + tip = buff; + if(c.get(section, "Exec", buff, sizeof(buff))) + exec = buff; + + ControlButton* cb = new ControlButton(tipbox, tip, 0, 0, 80, 100); + cb->copy_label(name.c_str()); + + c.get(section, "IconPathAbsolute", abspath, false); + + if(c.get(section, "Icon", buff, sizeof(buff))) { + if(abspath) { + Fl_Image* img = Fl_Shared_Image::get(buff); + cb->image(img); + } else { + edelib::String iconpath = edelib::IconTheme::get(buff, edelib::ICON_SIZE_LARGE); + if(!iconpath.empty()) + cb->image(Fl_Shared_Image::get(iconpath.c_str())); + else + EWARNING("Can't find %s icon\n", buff); + } } - c.get(sect, "IconPathAbsolute", cicon.abspath, false); - c.get(sect, "Position", cicon.abspath, -1); - - iconlist.push_back(cicon); + g->add(cb); } } -void ControlWin::init(void) { - begin(); - titlegrp = new Fl_Group(0, 0, 455, 50); +int main() { + edelib::Window* win = new edelib::Window(455, 330, _("EDE Control Panel")); + win->init(); + win->begin(); + Fl_Group* titlegrp = new Fl_Group(0, 0, 455, 50); titlegrp->box(FL_FLAT_BOX); titlegrp->color(138); titlegrp->begin(); - title = new Fl_Box(10, 10, 435, 30, label()); + Fl_Box* title = new Fl_Box(10, 10, 435, 30, win->label()); title->color(138); - title->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); + title->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); title->labelcolor(23); title->labelfont(FL_HELVETICA_BOLD); title->labelsize(16); titlegrp->end(); titlegrp->resizable(title); - icons = new ExpandableGroup(10, 60, 435, 225); + edelib::ExpandableGroup* icons = new edelib::ExpandableGroup(10, 60, 435, 225); icons->box(FL_DOWN_BOX); icons->color(FL_BACKGROUND2_COLOR); icons->end(); - tipbox = new Fl_Box(10, 295, 240, 25, _("Double click on desired item")); + Fl_Box* tipbox = new Fl_Box(10, 295, 240, 25, _("Double click on desired item")); tipbox->box(FL_FLAT_BOX); - tipbox->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP); + tipbox->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_CLIP); - list::iterator it, it_end; - it = iconlist.begin(); - it_end = iconlist.end(); + load_buttons(icons, tipbox); - for(; it != it_end; ++it) { - ControlButton* b = new ControlButton(tipbox, (*it).tip, 0, 0, 80, 100); - String iconpath = IconTheme::get((*it).icon.c_str(), ICON_SIZE_LARGE); - b->label((*it).name.c_str()); - - if(!iconpath.empty()) - b->image(Fl_Shared_Image::get(iconpath.c_str())); - icons->add(b); - } - - //options = new Fl_Button(260, 295, 90, 25, _("&Options")); - close = new Fl_Button(355, 295, 90, 25, _("&Close")); - close->callback(close_cb, this); + // Fl_Button* options = new Fl_Button(260, 295, 90, 25, _("&Options")); + Fl_Button* close = new Fl_Button(355, 295, 90, 25, _("&Close")); + close->callback(close_cb, win); + Fl::focus(close); // resizable invisible box - rbox = new Fl_Box(10, 220, 120, 65); - resizable(rbox); - end(); -} - -void ControlWin::do_close(void) { - hide(); -} - -int main() { - ControlWin cw(_("EDE Control Panel")); - cw.show(); + Fl_Box* rbox = new Fl_Box(10, 220, 120, 65); + win->resizable(rbox); + win->end(); + win->show(); return Fl::run(); } diff --git a/econtrol/econtrol.h b/econtrol/econtrol.h deleted file mode 100644 index f0d1643..0000000 --- a/econtrol/econtrol.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef __ECONTROL_H__ -#define __ECONTROL_H__ - -#include -#include -#include -#include - -#include -#include - -struct ControlIcon { - edelib::String name; - edelib::String tip; - edelib::String exec; - edelib::String icon; - bool abspath; - int pos; -}; - -class ControlButton : public Fl_Button { - private: - Fl_Box* tip; - edelib::String tipval; - public: - ControlButton(Fl_Box* t, edelib::String tv, int x, int y, int w, int h, const char* l = 0); - ~ControlButton(); - int handle(int event); -}; - -class ControlWin : public Fl_Window { - private: - Fl_Group* titlegrp; - Fl_Box* title; - Fl_Button* close; - //Fl_Button* options; - edelib::ExpandableGroup* icons; - Fl_Box* rbox; - Fl_Box* tipbox; - - edelib::list iconlist; - - void init(void); - void load_icons(void); - - public: - ControlWin(const char* title, int w = 455, int h = 330); - ~ControlWin(); - void do_close(void); -}; - - -#endif