Fl_String get_localized_name(Fl_Config &iconConfig) { Fl_String localName(get_localized_string()); Fl_String icon_name; if(iconConfig.get("Desktop Entry", localName, icon_name, "")) { iconConfig.get("Desktop Entry", "Name", icon_name, "None"); } return icon_name; }
// Start utility, like "time/date" or "volume" void startUtility(Fl_Button *, void *pName) { Fl_String value; pGlobalConfig.get("Panel", (char*)pName, value, ""); if(!pGlobalConfig.error() && !value.empty()) { value = "ede-launch \""+value; value += "\""; fl_start_child_process(value, false); } }
static void cb_test2(Fl_Widget*, void*) { switch (config_dlg->show_modal()) { case FL_DLG_OK: my_config.flush(); break; } }
void updateWorkspaces(Fl_Widget*,void*) { bool showapplet; pGlobalConfig.get("Panel", "Workspaces", showapplet, true); if (!showapplet) { return; } mWorkspace->clear(); mWorkspace->begin(); char **names=0; int count = Fl_WM::get_workspace_count(); int names_count = Fl_WM::get_workspace_names(names); int current = Fl_WM::get_current_workspace(); for(int n=0; n<count; n++) { Fl_Item *i = new Fl_Item(); i->callback(setWorkspace, (long)n); i->type(Fl_Item::RADIO); if(n<names_count && names[n]) { i->label(names[n]); free(names[n]); } else { Fl_String tmp; i->label(tmp.printf(tmp, "%s %d", _("Workspace") ,n+1)); } if(current==n) i->set_value(); } // add a divider if there are no workspaces if (count<1) { new Fl_Menu_Divider(); } if(names) delete []names; mWorkspace->end(); }
void clockRefresh(void *) { // Handle user's format preference Fl_String timestr = Fl_Date_Time::Now().time_string(); Fl_String timestrsec; Fl_String format; pGlobalConfig.get("Clock", "TimeFormat", format, ""); Fl_String seconds = timestr.sub_str(6, 2); Fl_String minutes = timestr.sub_str(3, 2); int hours = atoi(timestr.sub_str(0, 2)); if(format == "12") { if(hours > 12) { hours -= 12; } } timestr = Fl_String(hours) + ":" + minutes; timestrsec = timestr + ":" + seconds; mClockBox->label(timestr); strncpy(Fl_Date_Time::datePartsOrder, _("MDY"), 3); Fl_String pClockTooltip = Fl_Date_Time::Now().day_name() + ", "; pClockTooltip += Fl_Date_Time::Now().date_string() + ", " + timestrsec; mClockBox->tooltip(pClockTooltip); mClockBox->redraw(); Fl::add_timeout(1.0, clockRefresh); }
MainMenu::MainMenu() : Fl_Menu_Button(0,0,0,0, "Start") { layout_align(FL_ALIGN_LEFT); label_font(label_font()->bold()); label_size(label_size()+2); m_modified = 0; e_image = 0; m_open = false; bool showusername; pGlobalConfig.get("Panel", "ShowUsernameOnMenu", showusername, false); struct passwd *PWD; /* Search for an entry with a matching user ID. */ PWD = getpwuid(getuid()); if(showusername && PWD && PWD->pw_name && *PWD->pw_name) { label(PWD->pw_name); } else { label("EDE"); } tooltip(_("Welcome to the Equinox Desktop Environment.")); }
void restoreRunBrowser() { // Read the history of commands in runBrowser on start runBrowser->clear(); Fl_String historyString; pGlobalConfig.get("Panel", "RunHistory", historyString,""); Fl_String_List history(historyString,"|"); for (unsigned i = 0; i < history.count(); i++) { runBrowser->add(history[i]); } }
void updateSetup() { //printf("updateSetup()\n"); struct stat s; // Check if configuration needs to be updated if(!stat(pGlobalConfig.filename(), &s)) { static long last_modified = 0; long now = s.st_mtime; if(last_modified>0 && last_modified==now) { // Return if not modified return; } // Store last modified time last_modified = s.st_mtime; } pGlobalConfig.read_file(false); if(pGlobalConfig.error()) { fprintf(stderr, "[EWorkPanel Error]: %s\n", pGlobalConfig.strerror()); return; } bool auto_hide = false; static bool hiden = false; static bool last_state = false; static bool on_start = true; bool runbrowser; pGlobalConfig.get("Panel", "AutoHide", auto_hide, false); if (on_start) { last_state = auto_hide; pGlobalConfig.get("Panel", "RunBrowser", runbrowser, true); if (runbrowser) { restoreRunBrowser() ; } } bool old_hiden = hiden; if (auto_hide) { mPanelWindow->setAutoHide(1); hiden = true; } else { mPanelWindow->setAutoHide(0); hiden = false; } if(old_hiden!=hiden || on_start) { if(!hiden) { mPanelWindow->position(mPanelWindow->initX, mPanelWindow->initY); if(mPanelWindow->shown()) Fl_WM::set_window_strut(fl_xid(mPanelWindow), 0, 0, 0, mPanelWindow->h()); } else { mPanelWindow->position(mPanelWindow->initX, mPanelWindow->initY+mPanelWindow->h()-4); if(mPanelWindow->shown()) Fl_WM::set_window_strut(fl_xid(mPanelWindow), 0, 0, 0, 4); } } on_start = false; }
void cb_run_app(Fl_Input *i, void*) { Fl_String exec(i->value()); if ((exec == "") || (exec == " ")) return; exec = "ede-launch \""+exec; exec += "\""; fl_start_child_process(exec, false); Fl_Input_Browser *ib = (Fl_Input_Browser *)i->parent(); if (!ib->find(i->value())) { ib->add(i->value()); Fl_String_List history; int c = 0; if (ib->children() > 15) c = ib->children() - 15; for (; c < ib->children(); c++) { history.append(ib->child(c)->label()); } pGlobalConfig.set("Panel", "RunHistory", history.to_string("|")); pGlobalConfig.flush(); } i->value(""); }
int main(int argc, char **argv) { signal(SIGCHLD, SIG_IGN); signal(SIGSEGV, terminationHandler); fl_init_locale_support("eworkpanel", PREFIX"/share/locale"); fl_init_images_lib(); int X=0,Y=0,W=Fl::w(),H=Fl::h(); int substract; // Get current workarea Fl_WM::get_workarea(X,Y,W,H); //printf("Free area: %d %d %d %d\n", X,Y,W,H); // We expect that other docks are moving away from panel :) mPanelWindow = new Fl_Update_Window(X, Y+H-30, W, 30, "Workpanel"); mPanelWindow->layout_spacing(0); // Panel is type DOCK mPanelWindow->window_type(Fl_WM::DOCK); mPanelWindow->setAutoHide(0); // Read config bool doShowDesktop; pGlobalConfig.get("Panel", "ShowDesktop", doShowDesktop, false); bool doWorkspaces; pGlobalConfig.get("Panel", "Workspaces", doWorkspaces, true); bool doQLB; pGlobalConfig.get("Panel", "QuickLaunchBar", doQLB, true); bool doRunBrowser; pGlobalConfig.get("Panel", "RunBrowser", doRunBrowser, true); bool doSoundMixer; pGlobalConfig.get("Panel", "SoundMixer", doSoundMixer, true); bool doCpuMonitor; pGlobalConfig.get("Panel", "CPUMonitor", doCpuMonitor, true); bool doBatteryMonitor; doBatteryMonitor=true; // blah // Group that holds everything.. Fl_Group *g = new Fl_Group(0,0,0,0); g->box(FL_DIV_UP_BOX); g->layout_spacing(2); g->layout_align(FL_ALIGN_CLIENT); g->begin(); mSystemMenu = new MainMenu(); Fl_VertDivider *v = new Fl_VertDivider(0, 0, 5, 18, ""); v->layout_align(FL_ALIGN_LEFT); substract = 5; //this kind of if-else block is ugly // - but users demand such features so... if ((doShowDesktop) || (doWorkspaces) || (doQLB)) { int size=0; if ((doShowDesktop) && (doWorkspaces)) { size=48; } else { size=24; } // Add size for QLB: if (doQLB && qlb_create_toolbuttons(0)) size += (qlb_numbuttons * 24); Fl_Group *g2 = new Fl_Group(0,0,size,22); g2->box(FL_FLAT_BOX); g2->layout_spacing(0); g2->layout_align(FL_ALIGN_LEFT); // Show desktop button if (doShowDesktop) { PanelButton *mShowDesktop; mShowDesktop = new PanelButton(0, 0, 24, 22, FL_NO_BOX, FL_DOWN_BOX, "ShowDesktop"); mShowDesktop->layout_align(FL_ALIGN_LEFT); mShowDesktop->label_type(FL_NO_LABEL); mShowDesktop->align(FL_ALIGN_INSIDE|FL_ALIGN_CENTER); mShowDesktop->image(showdesktop_pix); mShowDesktop->tooltip(_("Show desktop")); mShowDesktop->callback( (Fl_Callback*)cb_showdesktop); mShowDesktop->show(); substract += 26; } // Workspaces panel mWorkspace=0; // so we can detect it later if (doWorkspaces) { mWorkspace = new PanelMenu(0, 0, 24, 22, FL_NO_BOX, FL_DOWN_BOX, "WSMenu"); mWorkspace->layout_align(FL_ALIGN_LEFT); mWorkspace->label_type(FL_NO_LABEL); mWorkspace->align(FL_ALIGN_INSIDE|FL_ALIGN_CENTER); mWorkspace->image(desktop_pix); mWorkspace->tooltip(_("Workspaces")); mWorkspace->end(); substract += 26; } // "Quick Lunch" buttons for (int count=0; count<qlb_numbuttons; count++) { qlb_buttons[count] = new PanelButton(0, 0, 24, 22, FL_NO_BOX, FL_DOWN_BOX, qlb_tooltips[count]); qlb_buttons[count]->layout_align(FL_ALIGN_LEFT); qlb_buttons[count]->label_type(FL_NO_LABEL); qlb_buttons[count]->align(FL_ALIGN_INSIDE|FL_ALIGN_CENTER); qlb_images[count] = NULL; qlb_images[count] = Fl_Image::read(qlb_icons[count]); if (!qlb_images[count]) fprintf(stderr, "skipping icon: %s\n", qlb_icons[count]); else qlb_buttons[count]->image(qlb_images[count]); qlb_buttons[count]->tooltip(qlb_tooltips[count]); qlb_buttons[count]->callback((Fl_Callback*)cb_qlb_taskbutton, (void *)qlb_commands[count]); qlb_buttons[count]->show(); substract += 26; } g2->end(); g2->show(); g2->resizable(); v = new Fl_VertDivider(0, 0, 5, 18, ""); v->layout_align(FL_ALIGN_LEFT); substract += 5; } // Run browser if (doRunBrowser) { Fl_Group *g3 = new Fl_Group(0,0,100,20); g3->box(FL_FLAT_BOX); g3->layout_spacing(0); g3->layout_align(FL_ALIGN_LEFT); runBrowser = new Fl_Input_Browser("",100,FL_ALIGN_LEFT,30); //runBrowser->image(run_pix); runBrowser->box(FL_THIN_DOWN_BOX); // This is the only box type which works :( // Added _ALWAYS so callback is in case: // 1) select old command from input browser // 2) press enter to execute. (this won't work w/o _ALWAYS) // runBrowser->input()->when(FL_WHEN_ENTER_KEY_ALWAYS | FL_WHEN_RELEASE_ALWAYS); // Vedran: HOWEVER, with _ALWAYS cb_run_app will be called way // too many times, causing fork-attack runBrowser->input()->when(FL_WHEN_ENTER_KEY); runBrowser->input()->callback((Fl_Callback*)cb_run_app); runBrowser->callback((Fl_Callback*)cb_run_app2); g3->end(); g3->show(); g3->resizable(); v = new Fl_VertDivider(0, 0, 5, 18, ""); v->layout_align(FL_ALIGN_LEFT); substract += 105; } // Popup menu for the whole taskbar Fl_Menu_Button *mPopupPanelProp = new Fl_Menu_Button( 0, 0, W, 28 ); mPopupPanelProp->type( Fl_Menu_Button::POPUP3 ); mPopupPanelProp->anim_flags(Fl_Menu_::LEFT_TO_RIGHT); mPopupPanelProp->anim_speed(0.8); mPopupPanelProp->begin(); Fl_Item *mPanelSettings = new Fl_Item(_("Settings")); mPanelSettings->x_offset(12); mPanelSettings->callback( (Fl_Callback*)runUtility, (void*)"epanelconf" ); new Fl_Divider(10, 5); Fl_Item *mAboutItem = new Fl_Item(_("About EDE...")); mAboutItem->x_offset(12); mAboutItem->callback( (Fl_Callback *)AboutDialog ); mPopupPanelProp->end(); // Taskbar... tasks = new TaskBar(); // Dock and various entries... dock = new Dock(); v = new Fl_VertDivider(0, 0, 5, 18, ""); v->layout_align(FL_ALIGN_RIGHT); { // MODEM mModemLeds = new Fl_Group(0, 0, 25, 18); mModemLeds->box(FL_FLAT_BOX); mModemLeds->hide(); mLedIn = new Fl_Box(2, 5, 10, 10); mLedIn->box( FL_OVAL_BOX ); mLedIn->color( (Fl_Color)968701184); mLedOut = new Fl_Box(12, 5, 10, 10); mLedOut->box( FL_OVAL_BOX); mLedOut->color( (Fl_Color)968701184); mModemLeds->end(); } { // KEYBOARD SELECT mKbdSelect = new KeyboardChooser(0, 0, 20, 18, FL_NO_BOX, FL_DOWN_BOX, "us"); mKbdSelect->hide(); mKbdSelect->anim_speed(4); mKbdSelect->label_font(mKbdSelect->label_font()->bold()); mKbdSelect->highlight_color(mKbdSelect->selection_color()); mKbdSelect->highlight_label_color( mKbdSelect->selection_text_color()); } { // CLOCK mClockBox = new Fl_Button(0, 0, 50, 20); mClockBox->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT); mClockBox->hide(); mClockBox->box(FL_FLAT_BOX); mClockBox->callback( (Fl_Callback*)startUtility, (void*)"Time and date"); } // SOUND applet if (doSoundMixer) { mSoundMixer = new Fl_Button(0, 0, 20, 18); mSoundMixer->hide(); mSoundMixer->box(FL_NO_BOX); mSoundMixer->focus_box(FL_NO_BOX); mSoundMixer->image(sound_pix); mSoundMixer->tooltip(_("Volume control")); mSoundMixer->align(FL_ALIGN_INSIDE); mSoundMixer->callback( (Fl_Callback*)startUtility, (void*)"Volume Control" ); } // CPU monitor if (doCpuMonitor) { cpumon = new CPUMonitor(); cpumon->hide(); } // Battery monitor if (doBatteryMonitor) { batmon = new BatteryMonitor(dock); batmon->hide(); } dock->add_to_tray(new Fl_Box(0, 0, 5, 20)); dock->add_to_tray(mClockBox); dock->add_to_tray(mKbdSelect); dock->add_to_tray(mSoundMixer); dock->add_to_tray(cpumon); dock->add_to_tray(batmon); // end Dock Fl::focus(mSystemMenu); mPanelWindow->end(); mPanelWindow->show(argc, argv); Fl_WM::callback(FL_WM_handler, 0, Fl_WM::DESKTOP_COUNT | Fl_WM::DESKTOP_NAMES | Fl_WM::DESKTOP_CHANGED| Fl_WM::WINDOW_LIST| Fl_WM::WINDOW_DESKTOP| Fl_WM::WINDOW_ACTIVE| Fl_WM::WINDOW_NAME| Fl_WM::WINDOW_ICONNAME); updateWorkspaces(0,0); tasks->update(); Fl::add_timeout(0, clockRefresh); Fl::add_timeout(0, updateStats); while(mPanelWindow->shown()) Fl::wait(); }
void getSchemeColors() { char tr[128]; int ir = 0; char *keys[] = { "color", "label color", "selection color", "selection text color", "highlight color", "text color", "highlight label color", }; Fl_Button *colorBoxes[7] = { colorBox, labelColorBox, selectionColorBox, selectionTextColorBox, highlightColorBox, textColorBox, highlightLabelColorBox }; if (schemeListBox->size() > 1) { Fl_Config *colorConfig; const char *ai = schemeListBox->value(); if (strcmp(ai, "Active")==0) { char pathActive[FL_PATH_MAX]; snprintf(pathActive, sizeof(pathActive)-1, "%s/.ede/schemes/Active.scheme", getenv("HOME")); colorConfig = new Fl_Config(pathActive); } else { char pathScheme[FL_PATH_MAX]; snprintf(pathScheme, sizeof(pathScheme)-1, "%s/.ede/schemes/%s", getenv("HOME"), ai); colorConfig = new Fl_Config(pathScheme); } for(int boxIndex = 0; boxIndex < 7; boxIndex++) { colorConfig->set_section("widgets/default"); if(!colorConfig->read(keys[boxIndex], ir)) { colorBoxes[boxIndex]->color((Fl_Color)ir); colorBoxes[boxIndex]->highlight_color((Fl_Color)ir); } } colorConfig->set_section("widgets/tooltip"); if(!colorConfig->read("color", ir)) { tooltipBox->color((Fl_Color)ir); tooltipBox->highlight_color((Fl_Color)ir); } if(!colorConfig->read("label color",ir)) { tooltipTextColorButton->color((Fl_Color)ir); tooltipTextColorButton->highlight_color((Fl_Color)ir); } colorConfig->set_section("widgets/default"); if (!colorConfig->read("text background", ir)) { textBackgroundBox->color((Fl_Color)ir); textBackgroundBox->highlight_color((Fl_Color)ir); } Fl_String tmpencoding; if(!colorConfig->read("font encoding", tr, 0, sizeof(tr))) { tmpencoding = tr; } if(!colorConfig->read("label font", tr, 0, sizeof(tr))) { if (tr[0] == '_') tr[0] = ' '; // converted leading space Fl_Font thefont = fl_create_font(tr); labelfont.font = thefont; labelfont.encoding = tmpencoding; labelfont.defined = true; if(!colorConfig->read("label size", tr, 0, sizeof(tr))) { labelfont.size = atoi(tr); } } if(!colorConfig->read("text font", tr, 0, sizeof(tr))) { if (tr[0] == '_') tr[0] = ' '; Fl_Font thefont = fl_create_font(tr); textfont.font = thefont; textfont.encoding = tmpencoding; textfont.defined = true; if(!colorConfig->read("text size", tr, 0, sizeof(tr))) { textfont.size = atoi(tr); } } labelFontInput->label(font_nice_name(labelfont)); textFontInput->label(font_nice_name(textfont)); colorConfig->set_section("global colors"); if(!colorConfig->read("background", ir)) backgroundBox->color((Fl_Color)ir); colorBox->parent()->parent()->redraw(); delete colorConfig; } }