void Fl_Help_Dialog::make_group(int w, int h) { menubar_ = new Fl_Menu_Bar(0, 0, 595, 20); menubar_->begin(); { Fl_Item_Group *g = new Fl_Item_Group("&File"); Fl_Item *i; i= new Fl_Item("Open"); i->shortcut(FL_CTRL+'o'); i->callback((Fl_Callback*)cb_open, this); i = new Fl_Item("Close"); i->shortcut(FL_CTRL+'c'); i->callback((Fl_Callback*)cb_close, this); g->end(); } menubar_->end(); { Fl_Group *g = new Fl_Group(0, 20, w, 30); g->box(FL_THIN_DOWN_BOX); Fl_Button *b; b = back = new Fl_Highlight_Button(35, 2, 30, 25, "@<-"); b->box(FL_HIGHLIGHT_UP_BOX); b->label_type(FL_SYMBOL_LABEL); b->label_color(FL_DARK3); b->highlight_label_color(FL_GRAY); b->callback((Fl_Callback*)cb_back, this); b->tooltip("Back"); b->deactivate(); b = next = new Fl_Highlight_Button(65, 2, 30, 25, "@->"); b->box(FL_HIGHLIGHT_UP_BOX); b->label_type(FL_SYMBOL_LABEL); b->label_color(FL_DARK3); b->highlight_label_color(FL_GRAY); b->callback((Fl_Callback*)cb_next, this); b->tooltip("Next"); b->deactivate(); b = new Fl_Highlight_Button(5, 2, 30, 25); b->image(Fl_Image::read(0, (uchar*)datas_open)); b->box(FL_HIGHLIGHT_UP_BOX); b->callback((Fl_Callback*)cb_open, this); b->tooltip("Open"); b->take_focus(); g->end(); } htmlWidget = new Fl_Simple_Html(0, 50, w, h-50); htmlWidget->callback(cb_html_link, this); htmlWidget->end(); resizable(htmlWidget); }
void Fl_File_Dialog::filters(Filter **filters) { filter_->clear(); filter_->begin(); Fl_Item *i; if(!filters) { static Filter tmp; tmp.pattern = "*"; tmp.type_str = "All Files (*)"; _cur_filter = &tmp; i = new Fl_Item(); i->copy_label("(All Files)"); i->user_data(&tmp); } else { _cur_filter = filters[0]; for(Filter *f=*filters++; f!=0; f=*filters++) { char tmp[128]; sprintf(tmp, "%s",f->type_str); i = new Fl_Item(); i->copy_label(tmp); i->user_data(f); } } filter_->value(filter_->child(0)->label()); filter_->end(); filter_->redraw(); }
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(); }
Desktop::Desktop() : Fl_Double_Window(0, 0, Fl::w(), Fl::h(), "EIconMan") { Fl_WM::callback(cb_update_workarea, this, Fl_WM::DESKTOP_WORKAREA); wpaper = 0; bg_color = FL_BLUE; bg_opacity = 255; bg_mode = 0; window_type(Fl_WM::DESKTOP); popup = new Fl_Menu_Button(0, 0, 0, 0); popup->type(Fl_Menu_Button::POPUP3); popup->begin(); Fl_Item *icon; icon = new Fl_Item(_("&New desktop item")); icon->callback((Fl_Callback*)create_new_icon, 0); icon->x_offset(18); icon = new Fl_Item(_("&Refresh")); icon->callback((Fl_Callback*)refresh, 0); icon->x_offset(18); new Fl_Menu_Divider(); icon = new Fl_Item(_("&Icons Settings ")); icon->callback((Fl_Callback*)icons_properties, (void*) this); icon->x_offset(18); icon = new Fl_Item(_("&Background Settings")); icon->callback((Fl_Callback*)desktop_properties, (void*) this); icon->x_offset(18); popup->end(); end(); show(); }
void Fl_Tool_Bar::layout() { if(!opened()) { Fl_Widget::layout(); return; } int X=0,Y=0,W=w(),H=h(); box()->inset(X,Y,W,H); X+=glyph_size()+layout_spacing(); H=0; int hoff = layout_spacing()*2 + box()->dh(); int out=-1; for(int n=0; n<children(); n++) { Fl_Widget *w = child(n); if(w==m_menu || w==m_menubut || w==m_right) continue; w->show(); int ww = w->w(); int wh = h()-hoff; w->preferred_size(ww, wh); w->resize(X, box()->dy()+layout_spacing(), ww, wh); w->layout(); if(H < w->h()+hoff) H = w->h()+hoff; X += w->w()+layout_spacing(); if(X>W - (m_menubut->visible()?15:0) ) { out=n; //w->hide(); break; } } if(m_menu->children()) m_menu->clear(); if(out>=0) { m_menubut->resize(W-15, Y+2, 14, H-box()->dh()-4); m_menu->resize(W-15, Y, 15, H-box()->dh()); m_menubut->show(); m_menu->begin(); for(int n=out; n<children(); n++) { Fl_Widget *w = child(n); if(w==m_menu || w==m_menubut || w==m_right) continue; if(n>out) w->hide(); if(w->is_group()) continue; if(w->type()==Fl_Divider::VERTICAL) { // Create divider, only if not first in menu if(n>out) new Fl_Divider(1, 5); } else { Fl_Item *i = new Fl_Item(); // Tooltip as a label, if theres one i->label(w->tooltip().empty() ? w->label() : w->tooltip()); i->image(w->image()); i->user_data(w); i->activate(w->active()); i->type(w->type()); if(w->value()) i->set_value(); else i->clear_value(); } } m_menu->end(); } else { m_menubut->hide(); } if(h() != H) { h(H); } Fl_Widget::layout(); }
Fl_Double_Window* make_window() { Fl_Double_Window* w; {Fl_Double_Window* o = new Fl_Double_Window(560, 489); w = o; o->type(241); {Fl_Box* o = imbox = new Fl_Box(5, 30, 385, 455); o->box(FL_ENGRAVED_BOX); o->align(FL_ALIGN_CLIP); Fl_Group::current()->resizable(o); } {Fl_Box* o = filename_box = new Fl_Box(5, 5, 385, 20, "No file loaded..."); o->box(FL_THIN_DOWN_BOX); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } {Fl_Group* o = new Fl_Group(395, 5, 160, 480); o->box(FL_THIN_DOWN_BOX); {Fl_Button* o = new Fl_Button(10, 10, 140, 25, "Load File"); o->box(FL_THIN_UP_BOX); o->callback((Fl_Callback*)cb_Load); } {Fl_Button* o = new Fl_Button(10, 40, 140, 25, "Exit"); o->box(FL_THIN_UP_BOX); o->callback((Fl_Callback*)cb_Exit); } new Fl_Divider(10, 75, 140, 15, "label"); {Fl_Button* o = new Fl_Button(10, 100, 140, 25, "Fit To Box"); o->type(Fl_Button::TOGGLE); o->box(FL_THIN_UP_BOX); o->callback((Fl_Callback*)cb_Fit); } {Fl_Button* o = new Fl_Button(10, 130, 140, 25, "Tile"); o->type(Fl_Button::TOGGLE); o->box(FL_THIN_UP_BOX); o->callback((Fl_Callback*)cb_Tile); } {Fl_Choice* o = filter_choice = new Fl_Choice(10, 335, 140, 25, "Filter:"); o->begin(); o->align(FL_ALIGN_TOP | FL_ALIGN_LEFT); o->tooltip("Choose filter"); {Fl_Item* o = new Fl_Item("None"); o->user_data((void*)(0)); } {Fl_Item* o = new Fl_Item("Brightness"); o->user_data((void*)(FILTER_BRIGHTNESS)); } {Fl_Item* o = new Fl_Item("Contrast"); o->user_data((void*)(FILTER_CONTRAST)); } {Fl_Item* o = new Fl_Item("Grayscale"); o->user_data((void*)(FILTER_GRAYSCALE)); } {Fl_Item* o = new Fl_Item("Gamma"); o->user_data((void*)(FILTER_GAMMA)); } {Fl_Item* o = new Fl_Item("Fore Blend"); o->user_data((void*)(FILTER_FOREBLEND)); } {Fl_Item* o = new Fl_Item("Back Blend"); o->user_data((void*)(FILTER_BACKBLEND)); } o->end(); } {Fl_Box* o = new Fl_Box(10, 160, 140, 160); o->parent()->resizable(o); } {Fl_Value_Slider* o = Rslider = new Fl_Value_Slider(25, 380, 125, 15, "R"); o->type(Fl_Value_Slider::HORIZONTAL); o->label_size(10); o->text_size(10); o->minimum(-3); o->maximum(3); o->value(1); o->slider_size(5); o->align(FL_ALIGN_LEFT); o->tooltip("Red value for filter"); } {Fl_Value_Slider* o = Gslider = new Fl_Value_Slider(25, 400, 125, 15, "G"); o->type(Fl_Value_Slider::HORIZONTAL); o->label_size(10); o->text_size(10); o->minimum(-3); o->maximum(3); o->value(1); o->slider_size(5); o->align(FL_ALIGN_LEFT); o->tooltip("Green value for filter"); } {Fl_Value_Slider* o = Bslider = new Fl_Value_Slider(25, 420, 125, 15, "B"); o->type(Fl_Value_Slider::HORIZONTAL); o->label_size(10); o->text_size(10); o->minimum(-3); o->maximum(3); o->value(1); o->slider_size(5); o->align(FL_ALIGN_LEFT); o->tooltip("Blue value for filter"); } {Fl_Button* o = new Fl_Button(10, 445, 140, 25, "Apply"); o->box(FL_THIN_UP_BOX); o->callback((Fl_Callback*)cb_Apply); o->tooltip("Apply current selected filter"); } {Fl_Check_Button* o = lock = new Fl_Check_Button(10, 365, 140, 15, "Lock sliders"); o->label_size(10); o->callback((Fl_Callback*)cb_lock); o->tooltip("Lock slider, RGB values taken from R slider "); } o->end(); } o->end(); } return w; }
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(); }
Icon::Icon(const GlobalIconSettings* gs, IconSettings* s) : Fl_Widget(s->x, s->y, ICONSIZE, ICONSIZE, "") { assert(gs != NULL); assert(s != NULL); /* GlobalIconSettings and IconSettings are shared * via single object who is changed from eiconman. * Since IconSettings are used more, we allocate for it. */ globals = gs; settings = new IconSettings; settings->name = s->name; settings->cmd = s->cmd; settings->icon_path = s->icon_path; /* settings->x and settings->y are not needed * since x() and y() have it. */ lwidth = lheight = 0; infocus = false; micon = NULL; popup = new Fl_Menu_Button(0, 0, 0, 0); // ?@? if(popup->parent()) popup->parent()->remove(popup); popup->parent(0); popup->type(Fl_Menu_Button::POPUP3); popup->begin(); const int off = 12; Fl_Item* openit = new Fl_Item(_("&Open")); openit->x_offset(off); Fl_Item* renameit = new Fl_Item(_("&Rename")); renameit->x_offset(off); renameit->callback(rename_cb, this); Fl_Item* deleteit = new Fl_Item(_("&Delete")); deleteit->x_offset(off); deleteit->callback(delete_cb, this); new Fl_Divider(); Fl_Item* propit = new Fl_Item(_("&Properties")); propit->x_offset(off); propit->callback(prop_cb, this); popup->end(); box(FL_NO_BOX); //tooltip(tt); copy_label(settings->name); label_color(globals->label_foreground); label_size(globals->label_fontsize); align(FL_ALIGN_CENTER|FL_ALIGN_WRAP); update_label_size(); icon_img = Fl_Image::read(settings->icon_path, 0); }