/* treewm - an X11 window manager.
 * Copyright (c) 2001-2002 Thomas Jäger <TheHunter2000 at web dot de>
 * This code is released under the terms of the GNU GPL.
 * See the included file LICENSE for details.
 * 
 * changed<05.02.2003> by Rudolf Polzer: replaced hash_map by map (for gcc 3.2)
 */

#ifndef RESMANAGER_H
#define RESMANAGER_H

#include "global.h"
#include "client.h"
#include <map>

struct ltstr {
  bool operator() (const char* s1, const char* s2) const  {
    return strcmp(s1, s2) < 0;
  }
};

typedef map<const char *,Info *, ltstr> InfoList;
typedef InfoList::iterator InfoListIter;

typedef map<const char *,unsigned long, ltstr> FlagMap;
typedef FlagMap::iterator FlagMapIter;

struct Entry {
  char *tag, *value;
  Entry *next;
};

struct FlagInfo {
  char *str;
  unsigned long flag;
};

// strings MUST be lower case here
#define CLIENTFLAGNUM 25
const FlagInfo ClientFlagArray[CLIENTFLAGNUM] = {
  {"shaded",CF_SHADED},
  {"autoshade",CF_AUTOSHADE},
  {"fixedsize",CF_FIXEDSIZE},
  {"noclose",CF_NOCLOSE},
  {"nominimize",CF_NOMINIMIZE},
  {"sticky",CF_STICKY},
  {"hastitle",CF_HASTITLE},
  {"hastbentry",CF_HASTBENTRY},
  {"grabaltclick", CF_GRABALTCLICK},
  {"passfirstclick", CF_PASSFIRSTCLICK},
  {"titlebarbuttons",CF_TITLEBARBUTTONS},
  {"snap",CF_SNAP},
  {"above",CF_ABOVE},
  {"below",CF_BELOW},
  {"hidemouse",CF_HIDEMOUSE},
  {"raiseonclick", CF_RAISEONCLICK},
  {"raiseonenter", CF_RAISEONENTER},
  {"focusonclick", CF_FOCUSONCLICK},
  {"focusonenter", CF_FOCUSONENTER},
  {"autoscroll", DF_AUTOSCROLL},
  {"tile", DF_TILE},
  {"autoresize",DF_AUTORESIZE},
  {"taskbarbuttons",DF_TASKBARBUTTONS},
  {"buttons",CF_TITLEBARBUTTONS | DF_TASKBARBUTTONS},
  {"grabkeyboard",DF_GRABKEYBOARD}
};

#define FLAGACTNUM 12

const FlagInfo FlagActArray[FLAGACTNUM] = {
  {"set",FLAG_SET},
  {"unset", FLAG_UNSET},
  {"toggle", FLAG_TOGGLE},
  {"remove", FLAG_REMOVE},
  {"dset", FLAG_DSET},
  {"dunset", FLAG_DUNSET},
  {"dtoggle", FLAG_DTOGGLE},
  {"dremove", FLAG_DREMOVE},
  {"cset", FLAG_CSET},
  {"cunset", FLAG_CUNSET},
  {"ctoggle", FLAG_CTOGGLE},
  {"cremove", FLAG_CREMOVE}
};



#define SE_SCEME      0
#define SE_ACTION     1
#define SE_CLIENTINFO 2
#define SE_MENUINFO   3
#define SE_NUM        4


class Section {
  public:
    ~Section();
    void SetEntry(char *,char *);
    char *GetEntry(char *);
    void IncludeSection(char *);
    bool GetIntEntry(char *, int &);
    int type;
    char *name;
    Entry *fe;
    Section *next;
};

class RPixmap {
  public:
    ~RPixmap();
    Pixmap GetPixmap();
    void FreePixmap();
    int n,w,h;
    char *path;
    Pixmap pm;
    RPixmap *next;

};

class ResManager {
  public:
    ResManager(char *);
    ~ResManager();
    Section *GotoSection(char *,char *);
    void DeleteSections();
    Info *GetInfo(int,char *);
    void CreateScemes();
    void LoadCFGFile();
    unsigned long GetFlag(char *);
    int GetFlagAct(char *);
    RPixmap *GetPixmap(const char *);
    RPixmap *pixmaps;
    InfoList *infos[SE_NUM];
    Section *sections;
    char *config;
    FlagMap ClientFlags,FlagActFlags;
};

#endif


syntax highlighted by Code2HTML, v. 0.9.1