HOW TO MAKE YOUR OWN THEMES:

Pesterchum 3.14 themes are very flexible and allow you to create
almost any kind of main window you can imagine (notable exception
being animation). This document should help you make your own themes
or make adjustments to existing themes!

Try following along with existing themes -- it'll make this document
much less confusing!

A note on editing existing themes: Don't edit current themes! If you
make changes in the existing themes directory, they *will* be
overwritten when you install any updates. 

CREATING A THEME
----------------
Every theme is just a separate directory in the "themes"
directory. That directory contains all the images used in that theme
as well as a "style.js" file which is the configuration file for the
theme.

FORMAT
------
The theme file is unlike most configuration files. It uses a format
called JSON, which at its core looks like this:

{"option": "value", "option2": 5, "category": {"option1": [10, 50] } }

The idea is that it's basically a list of: "name": "value"
separated by commas, inside brackets. So to give another example:

{"color": "red", "size": 50 }

means "color" is "red, and "size" is 50. Note that strings should have
quotes around them and numbers should not. You can also make certain
values into categories by making the value a bracketed list, like so:

{"memos": {"color": "red", "size": 50}, "convos": {"color": "green", "size": 50 } } 

This creates two categories: memos and convos, each with their own
color and size value. Also note that spaces don't really matter. It
helps to indent each category:

{"memos": {"color": "red", "size": 50"}, 
 "convos": {"color": "green", "size": 50" } 
}

or even

{"memos": {"color": "red", 
           "size": 50" }, 
 "convos": {"color": "green", 
            "size": 50" } 
}

SETTINGS
--------

INHERITS: You can make writing themes easier on yourself by using the
"inherits" setting. This sets all the settings to be the same as the
inherited theme unless you change it. So you only need to set the
settings you want to change!

When specifying file locations, you use the term "$path" to represent
the path to the current theme. The program will automatically
subtitute the correct location. 

A note about styles:

PC3.14 uses Qt's Stylesheets. That means that there are several
options in the style file that use CSS-like options. Most CSS options
are actually available in these settings. See this page for details
about Qt's stylesheets:

http://doc.qt.nokia.com/latest/stylesheet.html

and here for how CSS works:

http://www.w3schools.com/css/default.asp

If you know CSS, note that there is no cascading or need to type in
tag names. The program does this for you.

CSS values are like this:

background:#000000; font: bold;

with name:value; separated by ";".

NOTE that if you change a style from a theme you inherited, you MUST
put in all the options the old style had if you want to keep them!

I'll go over some of the most commonly used options in styles:

background-color: Self-explanatory. A note, though: colors can be
color names ("black"), standard HTML colors ("#000000") or rgba 
(red, green, blue, alpha) values ("rgba(0, 34, 151, 75%)").

background-image: Sets the background image to be this image. You
specify the location of the image by using "url(location)". So it
could be: "url($path/background.png)". 

background-repeat: Sets how the background should repeat if the area
is larger than the image. Values are repeat-x, repeat-y, repeat, and
no-repeat.

border: Sets the border of the item. Should be in the form "Xpx style
color". Example: "border: 2px solid black;" See reference for styles.

border-top/right/left/bottom: You can specify values for individual
borders the same way by using these. Example: "border-right: 1px solid
#ffff00;"

border-image: This one is complicated. Basically it's a good way of
having a resizable image with borders. See this page for a good
tutorial: http://www.lrbabe.com/sdoms/borderImage/ 

border-radius: Set this to a certain pixel length to get a rounded
border. Example: "border-radius: 4px;"

color: The color to make text. Example: "color: #ff0000;"

font: A shortcut. You can specify most different font properties from
this setting. Read on...

font-family: A string representing the font name. Be careful as
everyone's computer may not have the same fonts! Popular fonts like
"Arial" are fine. Example: "font-family: 'Arial';" Don't forget the
quotes!

font-size: A font's size in pixels. Example: "font-size: 12px;"

font-style: Basically italic or not. Example: "font-style: italic;"

font-weight: Basically bold or not. Example: "font-weight: bold;"

margin: Sets the amount of space between this object and other
objects. This is really only useful in memo and conversation
settings. You can set individual margins for right/left/top/bottom
by margin-top/left/right/bottom. Examples: "margin-top: 15px;" "margin:
5px;"

max/min-height/width: Sets the maximum/minimum height/width for something.

padding: Same thing as margin, kinda... basically this sets the space
between the outside of the box and the stuff inside it. See
http://doc.qt.nokia.com/latest/stylesheet-customizing.html#the-box-model
for more detail.

selection-color: The color of the text when an item is
selected. Example: "selection-color: black;"

selection-background-color: The color of the background of an item
when it is selected. Example: "selection-background-color: white;"

text-align: Centers, left-justifies, and right-justifies
text. Example: "text-align: center;"

--------

A note about sizes and coordinates:

Wherever it says "size", Pesterchum expects a value of the form [width,
height], where width and height are NUMBERS. No quotes should be
involved. Example: 

"size": [232,280]

Same with coordinates, and with coordinates, they are always the
distance away from the top left corner. So [50, 60] would be 50 pixels
to the right and 60 pixels down.


OK, onto the main event:

MAIN
----

"main": { .... }

This is the section that controls the main chum window.

"style": Sets the style of the main window (as above). This value will
affect other parts of the window. DO NOT put a background image
here. You must set that separately; this is necessary to support
themes that are not square (e.g. gold xl). 

"background-image": Sets the background image. This will define the
shape of your pesterchum! This is your canvas! See the included themes
for examples of what background images look like. 

"size": The size of the window. Usually this is the same as the size
of your background image. 

"icon": The file name of the image you want to appear in the tray and
your taskbar. Example: "icon": "$path/trayicon.png"

"newmsgicon": The file name of the image that will appear in the tray
when you have a new message.

"windowtitle": The title of the window.

"close": Category:
  "image": Location of the image of the "X" button.
  "loc": The coordinates of the "X" button.
Example:
"close": {"image": "$path/x.png", "loc": [210,2]}

"minimize": Category. Same as "close" but for the minimize button.

"menubar": Category. Contains one element:
  "style": Style of the main menubar.

"menu": Category.
  "style": Style of each individual menu.
  "menuitem": Affects each menu item on the main menu. Usually used
  for spacing.
  "selected": Style information for when you hover over a menu option.
  "loc": Location of the main menubar.

"sounds": Category.
  "alertsound": Path to the alert sound. Should be a wav.
  "ceasesound": Path to the sound when people cease pestering.

"menus": Category. This is where you change the text of the menus.
  "client": Category. The client menu.
    "_name": The text for the client menu header.
    (These are self explanatory:)
    "options"
    "memos"
    "userlist"
    "import"
    "reconnect"
    "idle"
    "exit"
  "profile": Category. Profile menu.
    "_name": Text of the profile menu header.
    "switch"
    "color"
    "theme"
    "block"
    "quirks"
  "help": Category. Help menu.
    "_name": Text of the help menu header
    "about"
  "rclickchumlist": Category. Text for right click menus.
    "pester"
    "removechum"
    "blockchum"
    "addchum"
    "unblockchum"
    "banuser"
    "opuser"
    "quirksoff"

"chums": Category. Creates your chumroll, where all the users are. All
of them.

  "style": Style for the chumroll
  "loc": Location of the chumroll
  "size": Size of the chumroll
  "userlistcolor": Default text color of the users
  "moods": Category. Contains a list of mood icons and colors; when a
  user has that mood, their handle will appear with that icon and text
  color. Basically follows the form "mood": { "icon": "$path/file.png", "color": "colorname" }
  Moods are:
    "chummy", "rancorous", "offline", "pleasant", "distraught",
    "pranky", "smooth", "mystified", "amazed", "insolent", "bemused",
    "ecstatic", "relaxed", "discontent", "devious", "sleek",
    "detestful", "mirthful", "manipulative", "vigorous", "perky",
    "acceptant", "protective", "blocked"
    (Note: blocked is not technically a "mood", but the icon is used
    when you block someone.)

  "trollslum": Category. The settings for the trollslum.
    "style": Style for the trollslum.
    "size": Size of the window.
    "label": Category. Sets the label of the trollslum.
      "style": Style of the label.
      "text": The text displayed.
    "chumroll": Category.
      "style": Sets the style for the list of users.
  
  "mychumhandle": Category. Settings for the text label, the user's
  current handle, and color swatch.
    "label": Category.
      "text": Text of label indicating chumhandle.
      "loc": Location of label.
      "style": Style of label.
    "handle": Category. User's current handle.
      "style": Style of handle.
      "loc": Location of handle.
      "size": Size of handle.
    "colorswatch": Category. Color swatch.
      "loc": Location of swatch.
      "size": Size of swatch.
      "text": Text displayed inside swatch.
    "currentmood": Location of icon of user's current mood.

  "defaultwindow": Category.
    "style": Style of the default window. (Quirks, profile changer,
    etc)

  "addchum": Category. Add chum button.
    "style": Style of button.
    "pressed": Style of button when pressed down.
    "loc": Location of button.
    "size": Size of button.
    "text": Text of button.
  The same attributes apply for these categories:
  "pester": Button to pester selected user.
  "block": Button to block selected user.

  "defaultmood": Default mood of this theme.
  "moodlabel": Category. Text label indicating mood buttons.
    "style": Style of label.
    "loc": Location of label.
    "text": Text of label.

  "moods": OK this can get complicated. Basically this is a list of
  categories, one for each mood button present in the interface. You
  make a list like this example:

"moods": [{"style": "", "option": "value"}, {"style": "", "option": "value"}]

  The square brackets are important!
  Anyway, for each mood, here are the possible settings:
    "style": Style of the mood button.
    "selected": Style of the mood button when selected.
    "loc": Location of the mood button.
    "size": Size of the mood button.
    "text": Text displayed on the mood button.
    "icon": Path to icon displayed on the mood button.
    "mood": Mood # of the button. See mood numbers -> mood names index
    at the end of this document.

CONVO SECTION
-------------

{"main": { ... },
 "convo": { ... }

This controls the conversation windows.

  "style": Style of the conversation window. Only affects the main
  window; does not cascade to the other parts.
  "scrollbar": Category. This item is OPTIONAL. It can be a little
  complicated: if you add this item, you MUST specify ALL of the
  settings yourself. If you don't add this item, it will use default
  system scrollbars. If you are inheriting a theme that does have
  scrollbar customization and you want to remove it, enter "scrollbar: null".

    Anyway, onto the scrollbar options:
    "style": General style of whole scrollbar.
    "handle": Style for the handle of the scrollbar.
    "downarrow": Style for the down arrow.
    "darrowstyle": Generally this is where you set the image of the
    down arrow with "image:url($path/downarrow.png)".
    "uparrow": Same as down arrow.
    "uarrowstyle": Same as darrowstyle but for up arrow.

  "margins": Category. Sets the margins around the contents of the
  conversation window.
    "top": Top margin
    "bottom", "left", "right"

  "size": Initial size of the conversation window.
  "chumlabel": Category. The part that says who youre chatting with.
    "style": Style for the chumlabel.
    "align": Category.
      "h": Horizontal alignment
      "v": Vertical alignment
    "minheight": The minimum height the chum label can be.
    "maxheight": The tallest the chum label can be.
    "text": The text of the label. Use $handle to represent the name
    of the person you're talking to. Example: ":: $handle ::"

  "textarea": Category. The window with the pesterlog in it.
    "style": Style of the window.

  "input": Category. The place where you type.
    "style": Style of the input area.

  "tabwindow": Category. The window that holds the tabs.
    "style": Style of the window.

  "tabs": Category. Style of the tabs in tabbed conversation.
    "style": Style of the tabs.
    "selectedstyle": Style of the currently selected tabs.
    "newmsgcolor": The color the text should turn when you get a new
    msg.
    "tabstyle": Usually 0. See the Qt Stylesheets for more
    information.

  "text": Category. Flavor text for system messages. In the following
    examples, the text in all caps will be replaced with these values:
    "beganpester": "<user> BEGAN PESTERING <you> at <time>"
    "ceasepester": "<user> CEASED PESTERING <you> at <time>"
    "blocked": "<user> BLOCKED <user>"
    "unblocked": "<user> UNBLOCKED <user>"
    "blockedmsg": "<user> DID NOT RECEIVE MESSAGE FROM <you>"
    "openmemo": "<user> OPENED MEMO ON BOARD <memo>"
    "joinmemo": "<user> RESPONDED TO MEMO <memo>"
    "closememo": "<user> CEASED RESPONDING TO MEMO"
    "kickedmemo": "YOU HAVE BEEN BANNED FROM THIS MEMO!"
    "idle": "<user> IS NOW AN IDLE CHUM!"

  "systemMsgColor": The color of system messages.

MEMOS SECTION
------------

{"main": { .... }
 "convo": { .... }
 "memos": { .... }

This controls the memos. It is almost identical to conversations,
with a few additions.

  "style": Same as convos.
  "size": Same as convos.
  "tabs": Same as convos.
  "scrollbar": Same as convos.
  "label": Same as convos.
  "input": Same as convos.
  "textarea": Same as convos.
  "margins": Same as convos.
  "userlist": Category. The list of users currently in the memo.
    "width": Width.
    "style": Style of the userlist.
  "time": Category. The time slider area.
    "text": Category.
      "width": Width of time text.
      "style": Style of time text.
    "slider": Category. Time slider.
      "style": Style of slider.
      "groove": Style of the groove of the slider.
      "handle": Style of the handle of the slider.
    "buttons": Category. Controls the time buttons.
      "style": Style of the buttons.
    "arrows": Category. Controls the time arrows.
      "left": Path to image of left arrow.
      "right" Path to image of right arrow.
      "style": Style of arrow boxes.

  "systemMsgColor": Color of system messges.
  "op": Category. 
    "icon": Icon that is shown next to the ops of the memo in the userlist.

Number -> Mood List
-------------------
0: "chummy"
1: "rancorous"
2: "offline"
3: "pleasant"
4: "distraught"
5: "pranky"
6: "smooth"
7: "ecstatic"
8: "relaxed"
9: "discontent"
10: "devious"
11: "sleek"
12: "detestful"
13: "mirthful"
14: "manipulative"
15: "vigorous"
16: "perky"
17: "acceptant"
18: "protective"
19: "mystified"
20: "amazed"
21: "insolent"
22: "bemused"
