⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractclasses.h

📁 配合linux窗口管理器使用
💻 H
字号:
/* vim:tabstop=4:expandtab:shiftwidth=4 *  * Idesk -- AbstractClasses.h * * Copyright (c) 2002, Chris (nikon) (nikon@sc.rr.com) * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: *  *      Redistributions of source code must retain the above copyright *      notice, this list of conditions and the following disclaimer. *       *      Redistributions in binary form must reproduce the above copyright *      notice, this list of conditions and the following disclaimer in the *      documentation and/or other materials provided with the distribution. *       *      Neither the name of the <ORGANIZATION> nor the names of its *      contributors may be used to endorse or promote products derived from *      this software without specific prior written permission. * * (See the included file COPYING / BSD ) */#ifndef ABSTRACT_IDESK_CLASSES#define ABSTRACT_IDESK_CLASSES#include <string>#include <vector>#include <iostream>#include "Misc.h"#include "Action.h"#include <stdlib.h>//class Application;  //circular includeusing namespace std;/* The classed defined below are all abstract, so they can never be * instantized. They represent the core functionality of idesk, and  * should not include any extraneous data which is specific to a certain * idesk configuration or usage (more on that in AbstractContainer). */class AbtractApp;class AbstractContainer;class AbstractIcon;class AbstractImage;class AbstractCaption;class AbstractConfig;class AbstractIconConfig;class AbstractActionConfig;// TODO descriptionclass AbstractApp{    protected:        char ** argv;        int argc;        AbstractContainer * container;        virtual bool processArguments() = 0;    public:        AbstractApp(int arg, char ** args) : argc(arg), argv(args) {}        virtual ~AbstractApp() {}        virtual void startIdesk() = 0;        virtual void restartIdesk() = 0;};/* AbstractContainer * This class represents the holding container for the icons. It contains * a list of all the icons and a few methods that act on the program as a  * whole. Subclass this is create different icon containers. Possibilities * for containers are a desktop container (already implemented), a widget * container (gtk, qt, or other), or a taskbar container. */class AbstractContainer {    protected:        vector<AbstractIcon *> iconList;        AbstractConfig * config;        AbstractActionConfig * actionConfig;        AbstractApp * app;        Action currentAction;    public:        AbstractContainer(AbstractApp * a) : app(a) {}        virtual ~AbstractContainer() {} ;        virtual void run() = 0;        virtual void addIcon(AbstractIcon *) = 0 ;        virtual void eventLoop() = 0 ;        virtual void configure() = 0;        virtual void saveState() = 0 ;        virtual void saveIcon(AbstractIcon *) = 0 ;        virtual void reloadState() = 0 ;        virtual void loadIcons() = 0 ;        virtual void arrangeIcons() = 0 ;        virtual void runCommand(const string & command) = 0 ;};/* * AbstractIcon * This class represents all the functionality of an icon. It includes an * image and a caption, which are the two defining characteristics of an  * idesk icon. Methods include functions that getcommon data used in both * the image and caption and methods that utilize the entire icon object * such as saving. Included are pointers to the parent container, the general * configuration class, and the configuration class specific to the icon. * Subclass this to create different types of icons. Possibilities include * icons that utilize different different drawing toolkits (Xlib, Gdk, Qt) and * icons that have special and/or different effects. */class AbstractIcon {    protected:        AbstractContainer * container;        AbstractImage * image;        AbstractCaption * caption;        AbstractConfig * config;        AbstractIconConfig * iconConfig;        vector<string> commandArray;        string iconFilename;        bool dragging, dragged;        bool captionOn;        int x, y;    public:        AbstractIcon(AbstractContainer * c, AbstractConfig * con,                AbstractIconConfig * iConfig)            : container(c), config(con), iconConfig(iConfig) {}        virtual ~AbstractIcon() {} ;        virtual bool setImage(AbstractImage *) = 0 ;        virtual bool setCaption(AbstractCaption *) = 0 ;        virtual void mouseOverEffect() = 0 ;        virtual void mouseOffEffect() = 0 ;        virtual int getX() = 0;        virtual int getY() = 0;        virtual int getHeight() = 0;        virtual int getWidth() = 0;        virtual vector<string> getCommandArray() { return commandArray; }        virtual string getCommand(int i) { return commandArray[i]; }        virtual void save() = 0;};/* AbstractImage * This class represents the image functionality of an image that represents * the icon. Methods included perform basic image functions, such as drawing * loading picture data, and image state changes. Pointers are included that * point to the parent container, parent icon, general configuration, and * icon specific configuration. Subclass this class to create different kinds * of images. Possibilities include different image types (raster vs vector) * and special effect images such as a shadow or a glow. */class AbstractImage {    protected:        AbstractContainer * container;        AbstractIcon * iconParent;        AbstractConfig * config;        AbstractIconConfig * iconConfig;    public:        AbstractImage(AbstractContainer * c, AbstractIcon * iParent,                AbstractConfig * con, AbstractIconConfig * iConfig)            : container(c), iconParent(iParent), config(con),        iconConfig(iConfig) {}        virtual ~AbstractImage() {} ;        virtual void draw() = 0;        virtual void mouseOverEffect() {}        virtual void mouseOffEffect() {}                virtual int getWidth() = 0;        virtual int getHeight() = 0;        virtual void configure() {} ;        virtual void createPicture() = 0;};/* * AbstractCaption * This class represents the text functionality of an icon. The caption for  * an icon is only optional. Methods included perform basic manipulation of  * the caption window, such as drawing, loading/creating font, and changing * state. Pointers are included that point to the parent container, parent * icon, general configuration, and icon specific configuration. Subclass * this to create different caption types. Possibilities include captions * that render using different font libraries (pango, Xft, Xlib). */class AbstractCaption {    protected:        AbstractContainer * container;        AbstractIcon * iconParent;        AbstractConfig * config;        AbstractIconConfig * iconConfig;        string text;    public:        AbstractCaption(AbstractContainer * c, AbstractIcon * iParent,                AbstractConfig * con, AbstractIconConfig * iConfig)            : container(c), iconParent(iParent), config(con),        iconConfig(iConfig) {}        virtual ~AbstractCaption() {} ;        virtual void setText(const string & str) { text = str; }        virtual string getText() { return text; }        virtual int getFontWidth() = 0 ;        virtual int getFontHeight() = 0 ;        virtual void draw() = 0;        virtual void updateText() = 0;        virtual void mouseOverEffect() {}        virtual void mouseOffEffect() {}        virtual void configure() = 0;        virtual void createFont() = 0;};/* AbstractConfig * This class represents the main configuration for idesk. This class is * created once by the container upon initialization. This should parse * any configuration files and set default values. Contained is a list of  * configurations for each individual icon. Methods in the class allow for * iterator style access to the list of icon configurations and general * program configuration. Subclass this to create different ways to configure * idesk, basically for different configuration syntaxes. */class AbstractConfig{    protected:        vector<AbstractIconConfig *> iconConfigList;        string ideskrcFile;        unsigned int iterCtr;        int clickDelay;    public:        AbstractConfig(string str) : ideskrcFile(str), iterCtr(0),                                     clickDelay(300) {}        virtual ~AbstractConfig() {}        virtual int getNumIcons() { return iconConfigList.size(); }        virtual AbstractIconConfig * nextIcon()        {            // TODO - use try and catch here to grab out-of-bounds errors            return iconConfigList[++iterCtr];        }        virtual bool notFinished() { return iterCtr < iconConfigList.size(); }        virtual AbstractIconConfig * start()        {            iterCtr = 0;            return iconConfigList.front();        }        virtual AbstractIconConfig * end()        {               iterCtr = iconConfigList.size();            return iconConfigList.back();        }        virtual unsigned int numIcons() { return iconConfigList.size(); }        virtual unsigned int getClickSpeed() { return clickDelay; }};/* AbstractIconConfig * This class is the configuration for a specific icon. This class should only * be created and accessed through a class that extends AbstractConfig. * This class pasrses data for a specific icon, whatever format that may be. * Members include all the options and data for an icon such as the caption  * and command text, picture and icon filename. It is assumed that each * icon has a seperate configuration file. Subclass this to create different * ways to configure  an icon, basically for different configuration syntaxes. */class AbstractIconConfig{    protected:        string iconFilename;        string pictureFilename;        string picExtension;        string caption;        vector<string> commandArray;    public:        virtual ~AbstractIconConfig() {}        virtual string getIconFilename() { return iconFilename; }        virtual string getPictureFilename() { return pictureFilename; }        virtual string getCaption() { return caption; }        virtual string getCommand(int i) { return commandArray[i]; }        virtual vector<string> getCommandArray() { return commandArray; }};/* AbstractActionConfig * Desc: TODO * */class AbstractActionConfig{    protected:        vector<Action *> executeActions;        Action * lock;        Action * reload;        Action * drag;        Action * endDrag;        string ideskrcFile;    public:        AbstractActionConfig(string str) : ideskrcFile(str) {}        virtual ~AbstractActionConfig() {}        // returning an dynamically allocated pointer, so some other class must        // do unallocation        virtual Action * getLock() { return lock; }        virtual Action * getReload() { return reload; }        virtual Action * getDrag() { return drag; }        virtual Action * getEndDrag() { return endDrag; }        virtual vector<Action *> getExecuteActions() { return executeActions; }        virtual Action * getExecuteAction(int i) { return executeActions[i]; }};        #endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -