Cim-5

From CenterIM

Jump to: navigation, search

Contents

[edit] Centerim 5

This will be the release where the protocol libraries will be substituted by libpurple. We want this because it will mean the protocol libraries in libpurple are kept uptodate.

This is currently being developed by Unknown.

You can get the sourcecode of alpha 1 here:

http://www.centerim.org/download/cim5/centerim-5.0-alpha1.tar.bz2

You can get the latest sourcecode this way (using Git):

git clone git+ssh://mob@repo.or.cz/srv/git/centerim5.git

Please use the following compiler flags when compiling:

CPPFLAGS='-ansi -pedantic -Wall -ggdb -O0'
CXXFLAGS='-ansi -pedantic -Wall -ggdb -O0'

The following is a list of the tasks which must be completed for a first preview. This first preview will only provide functionality, meaning that almost no effort will be spended on eye-candy.

  • Rewrite kkconsui (working name cppconsui) to adhere better to OO concepts. This will in fact take up most of the development time. More details below.
  • Provide logging capability (partially done, only a log window, no logfile, also lacks usefull functions)
  • Buddylist (partially done, starting conversations from the buddylist works, expand/collapse etc)
  • Account manager (meaning: thing that signs on accounts etc)
  • Configuration manager (partially done, being extended as the need arises)
  • Chat manager, chat window (sending/receiving messages works)
  • Transfers manager

(where manager means an interface for the manager provided by libpurple.)

There is a page that tries to describe the Architecture.

[edit] help needed

Currently cim5 is being developed by one person. It is not a small job. Therefore volunteers are needed to speed up the development.

There are a lot of tasks waiting to be done. There is a TODO list on this page, a TODO list in the source distribution, and there are also a lot of TODO items spread all over the code as comments. There are enough things left to do, even for beginning programmers.

If you'd like to help, don't hesitate! Join the discussion on #centerim@freenode.net and the mailing lists.

[edit] cppconsui

cppconsui will be a cpp console widget set making use of the curses library. The assumption is made that all modern systems also implement the cursesw version of curses. If this proves to be a problem a workaround must be found.

currently implemented:

  • Widget
  • Container (of widgets)
  • Window
  • TreeView
  • TextBrowser
  • TextInput
  • TextEdit
  • TextWindow
  • Scrollable (abstract interface class)
  • SrcollPane
  • InputProcessor (supports key bindings)
  • Label
  • LineStyle
  • Line (horizontal and vertical)
  • Listbox (horizontal and vertical)
  • MenuWindow
  • Dialog
  • MessageDialog
  • InputDialog
  • ColorScheme (object to store/retrieve color information)
  • ComboBox
  • Border
  • Panel
  • Button

(where implemented means implemented to make only the basics work).

[edit] Notes

Here be some notes:

  • We should use glibmm (c++ version of glib) and glib as appropriate.
  • signals should be handled by sigc++, although this is open for discussion.
  • Widgets cannot be displayed on screen by themselves. The *only* widgets which can be drawn on screen are Windows and derived classes. The idea behind this lie in the details of the curses implementation (see man newpad).
  • cim-5 will work internally with utf-8 exclusively. Input must be converted from the current locale to utf-8, output must be converted to the current locale. This stems from the fact that glib (used by libpurple) expects utf-8 encoded strings.

[edit] I want to help

Please contact unknown in the irc channel or via the mailinglist.

Also, the code is available (see somewhere on the top of this page). There is also a mob branch available, so you can contribute your patches.

Read (and understand!) http://pidgin.im/~elb/blog/architecture.html

Here is a list of tasks that need doing (see svn for more!):

  • TODO: The code is riddled with todo's (180 on last count). Find one, fix one. This will help you learn how cim5 works.
  • BuddyList: Implement options/settings to make it look and work like the cim4 buddylist. This involves the files BuddyList.* and BuddyListNode.*.
  • Widgets: We are going to need the following standard widgets: checkbox, button, radiogroup, line, frame, etc.
  • TextEdit: create a textedit widget based on gtk's textedit widget.
  • TextBuffer: create a textbuffer class based on gtk's textbuffer widget.
  • TextBrowser: Change to use the above mentioned textbuffer class.
  • TextInput: Add bindings for the textbuffer text editing functions (take a look at the editable interface in gtk).
  • Log: The current "logging" functionality doesn't actually write anything to log files. Add something to select which log level is visible. Add settings to change all this. This involves the files Log.* and Conf.*.
  • WindowManager: rewrite the windowmanager and window classes to not use panels anymore. Write our own window stack class. Let the windowmanager use window stacks. E.g. one stack for omnipresent windows, one for normal, one for background windows. Possibly also one for menu/status windows (bars at the top/bottom of the screen). Make sure input processing is done correctly (by including the menu/status windows in the input processing chain).
  • Conf: For window dimensions only use relative sizes (to support changing window sizes). Also make everything in cim5 use it. E.g. add a screen-resize callback to the window manager. Connects windows to this callback and let then resize themselves.
  • Conf: configuration windows. We need dynamic configuration windows for libpurple (see next item). We can use this for other configurable aspects of cim5.
  • requests: Make an interface for the requests API in libpurple. For this we need dynamic configuration windows.
  • InputProcessor: Currently adding bindings is supported. We need to make it configurable. Each bindable action should be added to some list. Bindable actions might be bound by default. Add an interface to retrieve the bindable actions of an object.

[edit] Screenshot of the current development status

Personal tools