Codebase list dillo / debian/3.0.5_rc1-1 src / ui.hh
debian/3.0.5_rc1-1

Tree @debian/3.0.5_rc1-1 (Download .tar.gz)

ui.hh @debian/3.0.5_rc1-1

17ecdf9
 
 
 
 
 
 
 
 
 
 
 
 
472ad04
17ecdf9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73d5e9e
17ecdf9
 
73d5e9e
 
 
 
 
17ecdf9
 
 
 
 
73d5e9e
17ecdf9
 
 
 
 
 
73d5e9e
17ecdf9
 
 
 
 
 
 
 
 
73d5e9e
 
 
17ecdf9
 
 
 
 
73d5e9e
 
 
 
 
 
 
 
 
 
17ecdf9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
472ad04
 
73d5e9e
472ad04
17ecdf9
dafdfbf
17ecdf9
 
 
73d5e9e
17ecdf9
472ad04
17ecdf9
73d5e9e
17ecdf9
 
472ad04
 
17ecdf9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
472ad04
17ecdf9
 
 
 
 
 
 
 
 
 
73d5e9e
 
17ecdf9
 
 
 
 
 
 
#ifndef __UI_HH__
#define __UI_HH__

// UI for dillo --------------------------------------------------------------

#include <FL/Fl_Window.H>
#include <FL/Fl_Widget.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Image.H>
#include <FL/Fl_Tabs.H>

#include "tipwin.hh"
#include "findbar.hh"

typedef enum {
   UI_BACK = 0,
   UI_FORW,
   UI_HOME,
   UI_RELOAD,
   UI_SAVE,
   UI_STOP,
   UI_BOOK,
   UI_TOOLS,
   UI_CLEAR,
   UI_SEARCH
} UIButton;

typedef enum {
   UI_NORMAL = 0,     /* make sure it's compatible with bool */
   UI_HIDDEN = 1
} UIPanelmode;


// Min size to fit the full UI
#define UI_MIN_W 600
#define UI_MIN_H 200

// Private classes
class CustProgressBox;
class CustTabs;


// Class definitions ---------------------------------------------------------
/*
 * Used to reposition group's widgets when some of them are hidden.
 * All children get the height of the group but retain their original width.
 * The resizable child get's the remaining space.
 */
class CustGroupHorizontal : public Fl_Group {
   Fl_Widget *rsz;
public:
  CustGroupHorizontal(int x,int y,int w ,int h,const char *l = 0) :
    Fl_Group(x,y,w,h,l) { };

  void rearrange() {
     Fl_Widget*const* a = array();
     int sum = 0, _x = x();
     int children_ = children();

     if (resizable())
        rsz = resizable();

     for (int i=0; i < children_; i++)
        if (a[i] != resizable() && a[i]->visible())
           sum += a[i]->w();

     for (int i=0; i < children_; i++) {
        if (a[i] == rsz) {
           if (w() > sum) {
              a[i]->resize(_x, y(), w()-sum, h());
              if (!resizable())
                 resizable(rsz);
           } else {
              /* widgets overflow width */
              a[i]->resize(_x, y(), 0, h());
              resizable(NULL);
           }
        } else {
           a[i]->resize(_x, y(), a[i]->w(), h());
        }
        if (a[i]->visible())
           _x += a[i]->w();
     }
     init_sizes();
     redraw();
  }
};

class CustGroupVertical : public Fl_Group {
public:
  CustGroupVertical(int x,int y,int w ,int h,const char *l = 0) :
    Fl_Group(x,y,w,h,l) { };

  void rearrange() {
     Fl_Widget*const* a = array();
     int sum = 0, _y = y();
     int children_ = children();

     for (int i=0; i < children_; i++)
        if (a[i] != resizable() && a[i]->visible())
           sum += a[i]->h();

     for (int i=0; i < children_; i++) {
        if (a[i] == resizable()) {
           a[i]->resize(x(), _y, w(), h() - sum);
        } else {
           a[i]->resize(x(), _y, w(), a[i]->h());
        }
        if (a[i]->visible())
           _y += a[i]->h();
     }
     init_sizes();
     redraw();
  }
};


//
// UI class definition -------------------------------------------------------
//
class UI : public CustGroupVertical {
   CustTabs *Tabs;

   CustGroupVertical *TopGroup;
   CustButton *Back, *Forw, *Home, *Reload, *Save, *Stop, *Bookmarks,
              *Tools, *Clear, *Search, *Help, *BugMeter, *FileButton;
   CustGroupHorizontal *LocBar, *NavBar, *StatusBar;
   Fl_Input *Location;
   CustProgressBox *PProg, *IProg;
   Fl_Group *Panel, *Main, *LocationGroup;
   Fl_Output *StatusOutput;
   Findbar *FindBar;

   int MainIdx;
   // Panel customization variables
   int PanelSize, Small_Icons;
   int p_xpos, p_ypos, bw, bh, mh, lh, nh, fh, sh, pw, lbl;
   bool PanelTemporary;

   UIPanelmode Panelmode;
   CustButton *make_button(const char *label, Fl_Image *img, Fl_Image*deimg,
                           int b_n, int start = 0);
   void make_toolbar(int tw, int th);
   void make_location(int ww);
   void make_progress_bars(int wide, int thin_up);
   void make_menubar(int x, int y, int w, int h);
   Fl_Widget *make_filemenu_button();
   void make_panel(int ww);
   void make_status_bar(int ww, int wh);

public:

   UI(int x,int y,int w,int h, const char* label = 0, const UI *cur_ui=NULL);
   ~UI();

   // To manage what events to catch and which to let pass
   int handle(int event);

   const char *get_location();
   void set_location(const char *str);
   void focus_location();
   void focus_main();
   void set_status(const char *str);
   void set_page_prog(size_t nbytes, int cmd);
   void set_img_prog(int n_img, int t_img, int cmd);
   void set_bug_prog(int n_bug);
   void set_render_layout(Fl_Group *nw);
   void customize();
   void button_set_sens(UIButton btn, int sens);
   void paste_url();
   int get_panelsize() { return PanelSize; }
   int get_smallicons() { return Small_Icons; }
   void change_panel(int new_size, int small_icons);
   void findbar_toggle(bool add);
   void panels_toggle();

   CustTabs *tabs() { return Tabs; }
   void tabs(CustTabs *tabs) { Tabs = tabs; }
   bool temporaryPanels() { return PanelTemporary; }
   void temporaryPanels(bool val) { PanelTemporary = val; }

   // Hooks to method callbacks
   void color_change_cb_i();
   void toggle_cb_i();
};

#endif // __UI_HH__