Change all instances of "colour" to "color" for consistency's sake
Overhaul inline colors system to properly support additive text and further expansion Add two new colors - Gray and Blank, the latter being used for IC parsing. Instead of adding text symbol by symbol, reveal more of the already-rendered text instead so that it properly anticipates words that need to be on the newline. Changed the append_ic function slightly so it appends ": " to text only after it's no longer needed. Made gray color less inconsistent with everything else
This commit is contained in:
		
							parent
							
								
									9911aeb5e6
								
							
						
					
					
						commit
						7097053723
					
				@ -242,7 +242,7 @@ public:
 | 
			
		||||
  //Returns the color with p_identifier from p_file
 | 
			
		||||
  QColor get_color(QString p_identifier, QString p_file);
 | 
			
		||||
 | 
			
		||||
  // Returns the colour from the misc folder.
 | 
			
		||||
  // Returns the color from the misc folder.
 | 
			
		||||
  QColor get_chat_color(QString p_identifier, QString p_chat);
 | 
			
		||||
 | 
			
		||||
  //Returns the sfx with p_identifier from sounds.ini in the current theme path
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@ public:
 | 
			
		||||
  AOTextArea(QWidget *p_parent = nullptr);
 | 
			
		||||
 | 
			
		||||
  void append_linked(QString p_message);
 | 
			
		||||
  void append_chatmessage(QString p_name, QString p_message, QString p_colour);
 | 
			
		||||
  void append_chatmessage(QString p_name, QString p_message, QString p_colur);
 | 
			
		||||
  void append_error(QString p_message);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
@ -171,7 +171,7 @@ public:
 | 
			
		||||
  //sets text color based on text color in chatmessage
 | 
			
		||||
  void set_text_color();
 | 
			
		||||
 | 
			
		||||
  // And gets the colour, too!
 | 
			
		||||
  // And gets the color, too!
 | 
			
		||||
  QColor get_text_color(QString color);
 | 
			
		||||
 | 
			
		||||
  //takes in serverD-formatted IP list as prints a converted version to server OOC
 | 
			
		||||
@ -202,7 +202,7 @@ public:
 | 
			
		||||
 | 
			
		||||
  //these are for OOC chat
 | 
			
		||||
  void append_ms_chatmessage(QString f_name, QString f_message);
 | 
			
		||||
  void append_server_chatmessage(QString p_name, QString p_message, QString p_colour);
 | 
			
		||||
  void append_server_chatmessage(QString p_name, QString p_message, QString p_color);
 | 
			
		||||
 | 
			
		||||
  //these functions handle chatmessages sequentially.
 | 
			
		||||
  //The process itself is very convoluted and merits separate documentation
 | 
			
		||||
@ -213,7 +213,7 @@ public:
 | 
			
		||||
 | 
			
		||||
  //This function filters out the common CC inline text trickery, for appending to
 | 
			
		||||
  //the IC chatlog.
 | 
			
		||||
  QString filter_ic_text(QString p_text);
 | 
			
		||||
  QString filter_ic_text(QString p_text, bool colorize = false, int pos = -1, int default_color = WHITE);
 | 
			
		||||
 | 
			
		||||
  //adds text to the IC chatlog. p_name first as bold then p_text then a newlin
 | 
			
		||||
  //this function keeps the chatlog scrolled to the top unless there's text selected
 | 
			
		||||
@ -259,18 +259,6 @@ private:
 | 
			
		||||
 | 
			
		||||
  QParallelAnimationGroup *screenshake_animation_group = new QParallelAnimationGroup;
 | 
			
		||||
 | 
			
		||||
  // This is for inline message-colouring.
 | 
			
		||||
 | 
			
		||||
  enum INLINE_COLOURS {
 | 
			
		||||
      INLINE_BLUE,
 | 
			
		||||
      INLINE_GREEN,
 | 
			
		||||
      INLINE_ORANGE,
 | 
			
		||||
      INLINE_GREY
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // A stack of inline colours.
 | 
			
		||||
  std::stack<INLINE_COLOURS> inline_colour_stack;
 | 
			
		||||
 | 
			
		||||
  bool next_character_is_not_special = false; // If true, write the
 | 
			
		||||
                        // next character as it is.
 | 
			
		||||
 | 
			
		||||
@ -279,14 +267,6 @@ private:
 | 
			
		||||
  int current_display_speed = 3;
 | 
			
		||||
  int message_display_speed[7] = {0, 10, 25, 40, 50, 70, 90};
 | 
			
		||||
 | 
			
		||||
  // This is for checking if the character should start talking again
 | 
			
		||||
  // when an inline blue text ends.
 | 
			
		||||
  bool entire_message_is_blue = false;
 | 
			
		||||
 | 
			
		||||
  // And this is the inline 'talking checker'. Counts how 'deep' we are
 | 
			
		||||
  // in inline blues.
 | 
			
		||||
  int inline_blue_depth = 0;
 | 
			
		||||
 | 
			
		||||
  // The character ID of the character this user wants to appear alongside with.
 | 
			
		||||
  int other_charid = -1;
 | 
			
		||||
 | 
			
		||||
@ -356,6 +336,7 @@ private:
 | 
			
		||||
  bool chatmessage_is_empty = false;
 | 
			
		||||
 | 
			
		||||
  QString previous_ic_message = "";
 | 
			
		||||
  QString additive_previous = "";
 | 
			
		||||
 | 
			
		||||
  //char id, muted or not
 | 
			
		||||
  QMap<int, bool> mute_map;
 | 
			
		||||
 | 
			
		||||
@ -120,7 +120,9 @@ enum COLOR
 | 
			
		||||
  YELLOW,
 | 
			
		||||
  RAINBOW,
 | 
			
		||||
  PINK,
 | 
			
		||||
  CYAN
 | 
			
		||||
  CYAN,
 | 
			
		||||
  GRAY,
 | 
			
		||||
  BLANK
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // DATATYPES_H
 | 
			
		||||
 | 
			
		||||
@ -1266,7 +1266,7 @@ void Courtroom::list_areas()
 | 
			
		||||
 | 
			
		||||
      if (ao_app->arup_enabled)
 | 
			
		||||
      {
 | 
			
		||||
        // Colouring logic here.
 | 
			
		||||
        // Coloring logic here.
 | 
			
		||||
        ui_area_list->item(n_listed_areas)->setBackground(free_brush);
 | 
			
		||||
        if (arup_locks.at(n_area) == "LOCKED")
 | 
			
		||||
        {
 | 
			
		||||
@ -1301,21 +1301,21 @@ void Courtroom::append_ms_chatmessage(QString f_name, QString f_message)
 | 
			
		||||
  ui_ms_chatlog->append_chatmessage(f_name, f_message, ao_app->get_color("ms_chatlog_sender_color", "courtroom_fonts.ini").name());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Courtroom::append_server_chatmessage(QString p_name, QString p_message, QString p_colour)
 | 
			
		||||
void Courtroom::append_server_chatmessage(QString p_name, QString p_message, QString p_color)
 | 
			
		||||
{
 | 
			
		||||
  QString colour = "#000000";
 | 
			
		||||
  QString color = "#000000";
 | 
			
		||||
 | 
			
		||||
  if (p_colour == "0")
 | 
			
		||||
    colour = ao_app->get_color("ms_chatlog_sender_color", "courtroom_fonts.ini").name();
 | 
			
		||||
  if (p_colour == "1")
 | 
			
		||||
    colour = ao_app->get_color("server_chatlog_sender_color", "courtroom_fonts.ini").name();
 | 
			
		||||
  if (p_color == "0")
 | 
			
		||||
    color = ao_app->get_color("ms_chatlog_sender_color", "courtroom_fonts.ini").name();
 | 
			
		||||
  if (p_color == "1")
 | 
			
		||||
    color = ao_app->get_color("server_chatlog_sender_color", "courtroom_fonts.ini").name();
 | 
			
		||||
  if(p_message == "Logged in as a moderator.")
 | 
			
		||||
  {
 | 
			
		||||
    ui_guard->show();
 | 
			
		||||
    append_server_chatmessage("CLIENT", "You were granted the Disable Modcalls button.", "1");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ui_server_chatlog->append_chatmessage(p_name, p_message, colour);
 | 
			
		||||
  ui_server_chatlog->append_chatmessage(p_name, p_message, color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Courtroom::on_chat_return_pressed()
 | 
			
		||||
@ -1635,7 +1635,7 @@ void Courtroom::handle_chatmessage(QStringList *p_contents)
 | 
			
		||||
    ic_chatlog_history.removeFirst();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  append_ic_text(": " + m_chatmessage[MESSAGE], f_showname);
 | 
			
		||||
  append_ic_text(m_chatmessage[MESSAGE], f_showname);
 | 
			
		||||
 | 
			
		||||
  previous_ic_message = f_message;
 | 
			
		||||
 | 
			
		||||
@ -2060,19 +2060,17 @@ void Courtroom::handle_chatmessage_3()
 | 
			
		||||
 | 
			
		||||
  int f_anim_state = 0;
 | 
			
		||||
  //BLUE is from an enum in datatypes.h
 | 
			
		||||
  bool text_is_blue = m_chatmessage[TEXT_COLOR].toInt() == BLUE;
 | 
			
		||||
  bool text_is_blue = m_chatmessage[TEXT_COLOR].toInt() == BLUE || m_chatmessage[TEXT_COLOR].toInt() == ORANGE;
 | 
			
		||||
 | 
			
		||||
  if (!text_is_blue && text_state == 1)
 | 
			
		||||
  {
 | 
			
		||||
    //talking
 | 
			
		||||
    f_anim_state = 2;
 | 
			
		||||
    entire_message_is_blue = false;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    //idle
 | 
			
		||||
    f_anim_state = 3;
 | 
			
		||||
    entire_message_is_blue = true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (f_anim_state <= anim_state)
 | 
			
		||||
@ -2108,148 +2106,156 @@ void Courtroom::handle_chatmessage_3()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString Courtroom::filter_ic_text(QString p_text)
 | 
			
		||||
QString Courtroom::filter_ic_text(QString p_text, bool colorize, int pos, int default_color)
 | 
			
		||||
{
 | 
			
		||||
  // Get rid of centering.
 | 
			
		||||
  if(p_text.startsWith(": ~~"))
 | 
			
		||||
  {
 | 
			
		||||
      // Don't forget, the p_text part actually everything after the name!
 | 
			
		||||
      // Hence why we check for ': ~~'.
 | 
			
		||||
  if(p_text.startsWith("~~"))
 | 
			
		||||
      p_text.remove(0,2);
 | 
			
		||||
 | 
			
		||||
      // Let's remove those two tildes, then.
 | 
			
		||||
      // : _ ~ ~
 | 
			
		||||
      // 0 1 2 3
 | 
			
		||||
      p_text.remove(2,2);
 | 
			
		||||
  int check_pos = 0;
 | 
			
		||||
  bool ic_next_is_not_special = false;
 | 
			
		||||
  QString f_character = p_text.at(check_pos);
 | 
			
		||||
  std::stack<COLOR> ic_color_stack;
 | 
			
		||||
 | 
			
		||||
  if (colorize)
 | 
			
		||||
  {
 | 
			
		||||
    ic_color_stack.push(static_cast<COLOR>(default_color));
 | 
			
		||||
    qDebug() << ic_color_stack.top();
 | 
			
		||||
    QString appendage = "<font color=\""+ get_text_color(QString::number(ic_color_stack.top())).name(QColor::HexRgb) +"\">";
 | 
			
		||||
    p_text.insert(check_pos, appendage);
 | 
			
		||||
    check_pos += appendage.size();
 | 
			
		||||
    if (pos > -1)
 | 
			
		||||
      pos += appendage.size();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Get rid of the inline-colouring.
 | 
			
		||||
  // I know, I know, excessive code duplication.
 | 
			
		||||
  // Nobody looks in here, I'm fine.
 | 
			
		||||
  int trick_check_pos = 0;
 | 
			
		||||
  bool ic_next_is_not_special = false;
 | 
			
		||||
  QString f_character = p_text.at(trick_check_pos);
 | 
			
		||||
  std::stack<INLINE_COLOURS> ic_colour_stack;
 | 
			
		||||
  while (trick_check_pos < p_text.size())
 | 
			
		||||
  while (check_pos < p_text.size())
 | 
			
		||||
  {
 | 
			
		||||
      f_character = p_text.at(trick_check_pos);
 | 
			
		||||
    f_character = p_text.at(check_pos);
 | 
			
		||||
    bool color_update = false;
 | 
			
		||||
 | 
			
		||||
      // Escape character.
 | 
			
		||||
      if (f_character == "\\" and !ic_next_is_not_special)
 | 
			
		||||
    if (!ic_next_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
      if (f_character == "\\")
 | 
			
		||||
      {
 | 
			
		||||
          ic_next_is_not_special = true;
 | 
			
		||||
          p_text.remove(trick_check_pos,1);
 | 
			
		||||
        ic_next_is_not_special = true;
 | 
			
		||||
        p_text.remove(check_pos, 1);
 | 
			
		||||
        check_pos -= 1;
 | 
			
		||||
        pos -= 1;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Text speed modifier.
 | 
			
		||||
      else if (f_character == "{" and !ic_next_is_not_special)
 | 
			
		||||
      //Nothing related to colors here
 | 
			
		||||
      else if (f_character == "{" || f_character == "}" || f_character == "@" || f_character == "$")
 | 
			
		||||
      {
 | 
			
		||||
          p_text.remove(trick_check_pos,1);
 | 
			
		||||
      }
 | 
			
		||||
      else if (f_character == "}" and !ic_next_is_not_special)
 | 
			
		||||
      {
 | 
			
		||||
          p_text.remove(trick_check_pos,1);
 | 
			
		||||
        p_text.remove(check_pos, 1);
 | 
			
		||||
        check_pos -= 1;
 | 
			
		||||
        pos -= 1;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      else if (f_character == "$" and !ic_next_is_not_special)
 | 
			
		||||
      //Colors that destroy the character
 | 
			
		||||
      else if (f_character == "`")
 | 
			
		||||
      {
 | 
			
		||||
          p_text.remove(trick_check_pos,1);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      else if (f_character == "@" and !ic_next_is_not_special)
 | 
			
		||||
      {
 | 
			
		||||
          p_text.remove(trick_check_pos,1);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Orange inline colourisation.
 | 
			
		||||
      else if (f_character == "|" and !ic_next_is_not_special)
 | 
			
		||||
      {
 | 
			
		||||
          if (!ic_colour_stack.empty())
 | 
			
		||||
          {
 | 
			
		||||
              if (ic_colour_stack.top() == INLINE_ORANGE)
 | 
			
		||||
              {
 | 
			
		||||
                  ic_colour_stack.pop();
 | 
			
		||||
                  p_text.remove(trick_check_pos,1);
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
              {
 | 
			
		||||
                  ic_colour_stack.push(INLINE_ORANGE);
 | 
			
		||||
                  p_text.remove(trick_check_pos,1);
 | 
			
		||||
              }
 | 
			
		||||
          }
 | 
			
		||||
        if (colorize)
 | 
			
		||||
        {
 | 
			
		||||
          if (!ic_color_stack.empty() && ic_color_stack.top() == GREEN && default_color != GREEN)
 | 
			
		||||
            ic_color_stack.pop(); //Cease our coloring
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
              ic_colour_stack.push(INLINE_ORANGE);
 | 
			
		||||
              p_text.remove(trick_check_pos,1);
 | 
			
		||||
            ic_color_stack.push(GREEN); //Begin our coloring
 | 
			
		||||
          }
 | 
			
		||||
          color_update = true;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
          p_text.remove(check_pos, 1);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Blue inline colourisation.
 | 
			
		||||
      else if (f_character == "(" and !ic_next_is_not_special)
 | 
			
		||||
      else if (f_character == "|")
 | 
			
		||||
      {
 | 
			
		||||
          ic_colour_stack.push(INLINE_BLUE);
 | 
			
		||||
          trick_check_pos++;
 | 
			
		||||
      }
 | 
			
		||||
      else if (f_character == ")" and !ic_next_is_not_special
 | 
			
		||||
               and !ic_colour_stack.empty())
 | 
			
		||||
      {
 | 
			
		||||
          if (ic_colour_stack.top() == INLINE_BLUE)
 | 
			
		||||
          {
 | 
			
		||||
              ic_colour_stack.pop();
 | 
			
		||||
              trick_check_pos++;
 | 
			
		||||
          }
 | 
			
		||||
        if (colorize)
 | 
			
		||||
        {
 | 
			
		||||
          if (!ic_color_stack.empty() && ic_color_stack.top() == ORANGE && default_color != ORANGE)
 | 
			
		||||
            ic_color_stack.pop(); //Cease our coloring
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
              ic_next_is_not_special = true;
 | 
			
		||||
            ic_color_stack.push(ORANGE); //Begin our coloring
 | 
			
		||||
          }
 | 
			
		||||
          color_update = true;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
          p_text.remove(check_pos, 1);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Grey inline colourisation.
 | 
			
		||||
      else if (f_character == "[" and !ic_next_is_not_special)
 | 
			
		||||
      //Colors that don't destroy the character and use 2 chars for beginning/end
 | 
			
		||||
      else if (colorize && f_character == "(")
 | 
			
		||||
      {
 | 
			
		||||
          ic_colour_stack.push(INLINE_GREY);
 | 
			
		||||
          trick_check_pos++;
 | 
			
		||||
        ic_color_stack.push(BLUE); //Begin our coloring
 | 
			
		||||
        color_update = true;
 | 
			
		||||
      }
 | 
			
		||||
      else if (f_character == "]" and !ic_next_is_not_special
 | 
			
		||||
               and !ic_colour_stack.empty())
 | 
			
		||||
      else if (colorize && f_character == ")" && ic_color_stack.top() == BLUE)
 | 
			
		||||
      {
 | 
			
		||||
          if (ic_colour_stack.top() == INLINE_GREY)
 | 
			
		||||
          {
 | 
			
		||||
              ic_colour_stack.pop();
 | 
			
		||||
              trick_check_pos++;
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
              ic_next_is_not_special = true;
 | 
			
		||||
          }
 | 
			
		||||
        ic_color_stack.pop(); //Cease our coloring
 | 
			
		||||
        color_update = true;
 | 
			
		||||
      }
 | 
			
		||||
      else if (colorize && f_character == "[")
 | 
			
		||||
      {
 | 
			
		||||
        if (colorize)
 | 
			
		||||
          ic_color_stack.push(GRAY); //Begin our coloring
 | 
			
		||||
        color_update = true;
 | 
			
		||||
      }
 | 
			
		||||
      else if (colorize && f_character == "]" && ic_color_stack.top() == GRAY)
 | 
			
		||||
      {
 | 
			
		||||
        if (colorize)
 | 
			
		||||
          ic_color_stack.pop(); //Cease our coloring
 | 
			
		||||
        color_update = true;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Green inline colourisation.
 | 
			
		||||
      else if (f_character == "`" and !ic_next_is_not_special)
 | 
			
		||||
      //Parse the newest color stack
 | 
			
		||||
      if (!ic_next_is_not_special && color_update && (pos <= -1 || check_pos < pos)) //Only color text if we haven't reached the "invisible threshold"
 | 
			
		||||
      {
 | 
			
		||||
          if (!ic_colour_stack.empty())
 | 
			
		||||
          {
 | 
			
		||||
              if (ic_colour_stack.top() == INLINE_GREEN)
 | 
			
		||||
              {
 | 
			
		||||
                  ic_colour_stack.pop();
 | 
			
		||||
                  p_text.remove(trick_check_pos,1);
 | 
			
		||||
              }
 | 
			
		||||
              else
 | 
			
		||||
              {
 | 
			
		||||
                  ic_colour_stack.push(INLINE_GREEN);
 | 
			
		||||
                  p_text.remove(trick_check_pos,1);
 | 
			
		||||
              }
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
              ic_colour_stack.push(INLINE_GREEN);
 | 
			
		||||
              p_text.remove(trick_check_pos,1);
 | 
			
		||||
          }
 | 
			
		||||
        QString appendage = "</font>";
 | 
			
		||||
 | 
			
		||||
        if (!ic_color_stack.empty())
 | 
			
		||||
          appendage += "<font color=\""+ get_text_color(QString::number(ic_color_stack.top())).name(QColor::HexRgb) +"\">";
 | 
			
		||||
 | 
			
		||||
        if (f_character == "(" || f_character == "[") //Gotta capture them in the color too
 | 
			
		||||
          p_text.insert(check_pos, appendage);
 | 
			
		||||
        else if (f_character == ")" || f_character == "]")
 | 
			
		||||
          p_text.insert(check_pos+1, appendage);
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          p_text.remove(check_pos, 1);
 | 
			
		||||
          p_text.insert(check_pos, appendage);
 | 
			
		||||
          check_pos -= 1;
 | 
			
		||||
          pos -= 1;
 | 
			
		||||
        }
 | 
			
		||||
        check_pos += appendage.size();
 | 
			
		||||
        if (pos > -1)
 | 
			
		||||
          pos += appendage.size();
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
      ic_next_is_not_special = false;
 | 
			
		||||
 | 
			
		||||
    //Make all chars we're not supposed to see invisible
 | 
			
		||||
    if (pos > -1 && check_pos == pos)
 | 
			
		||||
    {
 | 
			
		||||
      QString appendage = "";
 | 
			
		||||
      if (!ic_color_stack.empty())
 | 
			
		||||
      {
 | 
			
		||||
          trick_check_pos++;
 | 
			
		||||
          ic_next_is_not_special = false;
 | 
			
		||||
        //Clean it up, we're done here
 | 
			
		||||
        while (!ic_color_stack.empty())
 | 
			
		||||
            ic_color_stack.pop();
 | 
			
		||||
 | 
			
		||||
        appendage += "</font>";
 | 
			
		||||
      }
 | 
			
		||||
      ic_color_stack.push(BLANK);
 | 
			
		||||
      appendage += "<font color=\""+ get_text_color(QString::number(BLANK)).name(QColor::HexArgb) +"\">";
 | 
			
		||||
      p_text.insert(check_pos, appendage);
 | 
			
		||||
    }
 | 
			
		||||
    check_pos += 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!ic_color_stack.empty())
 | 
			
		||||
  {
 | 
			
		||||
    p_text.append("</font>");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return p_text;
 | 
			
		||||
@ -2292,6 +2298,7 @@ void Courtroom::append_ic_text(QString p_text, QString p_name, bool is_songchang
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        ui_ic_chatlog->textCursor().insertText(": ", normal);
 | 
			
		||||
        ui_ic_chatlog->textCursor().insertText(p_text, normal);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@ -2302,7 +2309,6 @@ void Courtroom::append_ic_text(QString p_text, QString p_name, bool is_songchang
 | 
			
		||||
          ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor);
 | 
			
		||||
          ui_ic_chatlog->textCursor().removeSelectedText();
 | 
			
		||||
          ui_ic_chatlog->textCursor().deleteChar();
 | 
			
		||||
          //qDebug() << ui_ic_chatlog->document()->blockCount() << " < " << log_maximum_blocks;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (old_cursor.hasSelection() || !is_scrolled_down)
 | 
			
		||||
@ -2333,6 +2339,7 @@ void Courtroom::append_ic_text(QString p_text, QString p_name, bool is_songchang
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        ui_ic_chatlog->textCursor().insertText(": ", normal);
 | 
			
		||||
        ui_ic_chatlog->textCursor().insertText(p_text + '\n', normal);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@ -2441,7 +2448,7 @@ void Courtroom::start_chat_ticking()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  set_text_color();
 | 
			
		||||
  rainbow_counter = 0;
 | 
			
		||||
//  rainbow_counter = 0;
 | 
			
		||||
 | 
			
		||||
  if (chatmessage_is_empty)
 | 
			
		||||
  {
 | 
			
		||||
@ -2452,10 +2459,10 @@ void Courtroom::start_chat_ticking()
 | 
			
		||||
 | 
			
		||||
  // At this point, we'd do well to clear the inline colour stack.
 | 
			
		||||
  // This stops it from flowing into next messages.
 | 
			
		||||
  while (!inline_colour_stack.empty())
 | 
			
		||||
  {
 | 
			
		||||
      inline_colour_stack.pop();
 | 
			
		||||
  }
 | 
			
		||||
//  while (!inline_colour_stack.empty())
 | 
			
		||||
//  {
 | 
			
		||||
//      inline_colour_stack.pop();
 | 
			
		||||
//  }
 | 
			
		||||
 | 
			
		||||
  ui_vp_chatbox->show();
 | 
			
		||||
  ui_vp_message->show();
 | 
			
		||||
@ -2463,15 +2470,12 @@ void Courtroom::start_chat_ticking()
 | 
			
		||||
  if (!is_additive)
 | 
			
		||||
  {
 | 
			
		||||
    ui_vp_message->clear();
 | 
			
		||||
    additive_previous = "";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  tick_pos = 0;
 | 
			
		||||
  blip_pos = 0;
 | 
			
		||||
 | 
			
		||||
  // Just in case we somehow got inline blue text left over from a previous message,
 | 
			
		||||
  // let's set it to false.
 | 
			
		||||
  inline_blue_depth = 0;
 | 
			
		||||
 | 
			
		||||
  // At the start of every new message, we set the text speed to the default.
 | 
			
		||||
  current_display_speed = 3;
 | 
			
		||||
  chat_tick_timer->start(message_display_speed[current_display_speed]);
 | 
			
		||||
@ -2486,11 +2490,10 @@ void Courtroom::start_chat_ticking()
 | 
			
		||||
 | 
			
		||||
void Courtroom::chat_tick()
 | 
			
		||||
{
 | 
			
		||||
  //note: this is called fairly often(every 60 ms when char is talking)
 | 
			
		||||
  //note: this is called fairly often
 | 
			
		||||
  //do not perform heavy operations here
 | 
			
		||||
 | 
			
		||||
  QString f_message = m_chatmessage[MESSAGE];
 | 
			
		||||
  f_message.remove(0, tick_pos);
 | 
			
		||||
 | 
			
		||||
  // Due to our new text speed system, we always need to stop the timer now.
 | 
			
		||||
  chat_tick_timer->stop();
 | 
			
		||||
@ -2498,14 +2501,7 @@ void Courtroom::chat_tick()
 | 
			
		||||
  // Stops blips from playing when we have a formatting option.
 | 
			
		||||
  bool formatting_char = false;
 | 
			
		||||
 | 
			
		||||
  // If previously, we have detected that the message is centered, now
 | 
			
		||||
  // is the time to remove those two tildes at the start.
 | 
			
		||||
  if (message_is_centered)
 | 
			
		||||
  {
 | 
			
		||||
    f_message.remove(0,2);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (f_message.size() == 0)
 | 
			
		||||
  if (tick_pos >= f_message.size())
 | 
			
		||||
  {
 | 
			
		||||
    text_state = 2;
 | 
			
		||||
    if (anim_state != 4)
 | 
			
		||||
@ -2516,239 +2512,78 @@ void Courtroom::chat_tick()
 | 
			
		||||
    QString f_char = m_chatmessage[CHAR_NAME];
 | 
			
		||||
    QString f_custom_theme = ao_app->get_char_shouts(f_char);
 | 
			
		||||
    ui_vp_chat_arrow->play("chat_arrow", f_char, f_custom_theme); //Chat stopped being processed, indicate that.
 | 
			
		||||
    additive_previous = additive_previous + filter_ic_text(f_message, true, -1, m_chatmessage[TEXT_COLOR].toInt());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    QTextBoundaryFinder tbf(QTextBoundaryFinder::Grapheme, f_message);
 | 
			
		||||
    QString f_rest = f_message;
 | 
			
		||||
    f_rest.remove(0, tick_pos);
 | 
			
		||||
    QTextBoundaryFinder tbf(QTextBoundaryFinder::Grapheme, f_rest);
 | 
			
		||||
    QString f_character;
 | 
			
		||||
    int f_char_length;
 | 
			
		||||
 | 
			
		||||
    tbf.toNextBoundary();
 | 
			
		||||
 | 
			
		||||
    if (tbf.position() == -1)
 | 
			
		||||
      f_character = f_message;
 | 
			
		||||
      f_character = f_rest;
 | 
			
		||||
    else
 | 
			
		||||
      f_character = f_message.left(tbf.position());
 | 
			
		||||
      f_character = f_rest.left(tbf.position());
 | 
			
		||||
 | 
			
		||||
    f_char_length = f_character.length();
 | 
			
		||||
    f_character = f_character.toHtmlEscaped();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    if (f_character == " ")
 | 
			
		||||
      ui_vp_message->insertPlainText(" ");
 | 
			
		||||
 | 
			
		||||
    // Escape character.
 | 
			
		||||
    else if (f_character == "\\" and !next_character_is_not_special)
 | 
			
		||||
    if (!next_character_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
        next_character_is_not_special = true;
 | 
			
		||||
        formatting_char = true;
 | 
			
		||||
    }
 | 
			
		||||
      if (f_character == "\\")
 | 
			
		||||
      {
 | 
			
		||||
          next_character_is_not_special = true;
 | 
			
		||||
          formatting_char = true;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    // Text speed modifier.
 | 
			
		||||
    else if (f_character == "{" and !next_character_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
        // ++, because it INCREASES delay!
 | 
			
		||||
        current_display_speed++;
 | 
			
		||||
        formatting_char = true;
 | 
			
		||||
    }
 | 
			
		||||
    else if (f_character == "}" and !next_character_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
        current_display_speed--;
 | 
			
		||||
        formatting_char = true;
 | 
			
		||||
    }
 | 
			
		||||
      // Text speed modifier.
 | 
			
		||||
      else if (f_character == "{")
 | 
			
		||||
      {
 | 
			
		||||
          // ++, because it INCREASES delay!
 | 
			
		||||
          current_display_speed++;
 | 
			
		||||
          formatting_char = true;
 | 
			
		||||
      }
 | 
			
		||||
      else if (f_character == "}")
 | 
			
		||||
      {
 | 
			
		||||
          current_display_speed--;
 | 
			
		||||
          formatting_char = true;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    else if (f_character == "@" and !next_character_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
        this->do_screenshake();
 | 
			
		||||
        formatting_char = true;
 | 
			
		||||
    }
 | 
			
		||||
      //Screenshake.
 | 
			
		||||
      else if (f_character == "@")
 | 
			
		||||
      {
 | 
			
		||||
          this->do_screenshake();
 | 
			
		||||
          formatting_char = true;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    else if (f_character == "$" and !next_character_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
        this->do_flash();
 | 
			
		||||
        formatting_char = true;
 | 
			
		||||
    }
 | 
			
		||||
      //Flash.
 | 
			
		||||
      else if (f_character == "$")
 | 
			
		||||
      {
 | 
			
		||||
          this->do_flash();
 | 
			
		||||
          formatting_char = true;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    // Orange inline colourisation.
 | 
			
		||||
    else if (f_character == "|" and !next_character_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
        if (!inline_colour_stack.empty())
 | 
			
		||||
        {
 | 
			
		||||
            if (inline_colour_stack.top() == INLINE_ORANGE)
 | 
			
		||||
            {
 | 
			
		||||
                inline_colour_stack.pop();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                inline_colour_stack.push(INLINE_ORANGE);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            inline_colour_stack.push(INLINE_ORANGE);
 | 
			
		||||
        }
 | 
			
		||||
        formatting_char = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Blue inline colourisation.
 | 
			
		||||
    else if (f_character == "(" and !next_character_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
        inline_colour_stack.push(INLINE_BLUE);
 | 
			
		||||
        ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(BLUE)).name() +"\">" + f_character + "</font>");
 | 
			
		||||
 | 
			
		||||
        // Increase how deep we are in inline blues.
 | 
			
		||||
        inline_blue_depth++;
 | 
			
		||||
 | 
			
		||||
        // Here, we check if the entire message is blue.
 | 
			
		||||
        // If it isn't, we stop talking.
 | 
			
		||||
        if (!entire_message_is_blue and anim_state != 4)
 | 
			
		||||
        {
 | 
			
		||||
          QString f_char = m_chatmessage[CHAR_NAME];
 | 
			
		||||
          QString f_emote = m_chatmessage[EMOTE];
 | 
			
		||||
          ui_vp_player_char->play_idle(f_char, f_emote);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else if (f_character == ")" and !next_character_is_not_special
 | 
			
		||||
             and !inline_colour_stack.empty())
 | 
			
		||||
    {
 | 
			
		||||
        if (inline_colour_stack.top() == INLINE_BLUE)
 | 
			
		||||
        {
 | 
			
		||||
            inline_colour_stack.pop();
 | 
			
		||||
            ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(BLUE)).name() +"\">" + f_character + "</font>");
 | 
			
		||||
 | 
			
		||||
            // Decrease how deep we are in inline blues.
 | 
			
		||||
            // Just in case, we do a check if we're above zero, but we should be.
 | 
			
		||||
            if (inline_blue_depth > 0)
 | 
			
		||||
            {
 | 
			
		||||
              inline_blue_depth--;
 | 
			
		||||
              // Here, we check if the entire message is blue.
 | 
			
		||||
              // If it isn't, we start talking if we have completely climbed out of inline blues.
 | 
			
		||||
              if (!entire_message_is_blue)
 | 
			
		||||
              {
 | 
			
		||||
                // We should only go back to talking if we're out of inline blues, not during a non. int. pre, and not on the last character.
 | 
			
		||||
                if (inline_blue_depth == 0 and anim_state != 4 and !(tick_pos+1 >= f_message.size()))
 | 
			
		||||
                {
 | 
			
		||||
                  QString f_char = m_chatmessage[CHAR_NAME];
 | 
			
		||||
                  QString f_emote = m_chatmessage[EMOTE];
 | 
			
		||||
                  ui_vp_player_char->play_talking(f_char, f_emote);
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            next_character_is_not_special = true;
 | 
			
		||||
            tick_pos -= f_char_length;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Grey inline colourisation.
 | 
			
		||||
    else if (f_character == "[" and !next_character_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
        inline_colour_stack.push(INLINE_GREY);
 | 
			
		||||
        ui_vp_message->insertHtml("<font color=\""+ get_text_color("_inline_grey").name() +"\">" + f_character + "</font>");
 | 
			
		||||
    }
 | 
			
		||||
    else if (f_character == "]" and !next_character_is_not_special
 | 
			
		||||
             and !inline_colour_stack.empty())
 | 
			
		||||
    {
 | 
			
		||||
        if (inline_colour_stack.top() == INLINE_GREY)
 | 
			
		||||
        {
 | 
			
		||||
            inline_colour_stack.pop();
 | 
			
		||||
            ui_vp_message->insertHtml("<font color=\""+ get_text_color("_inline_grey").name() +"\">" + f_character + "</font>");
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            next_character_is_not_special = true;
 | 
			
		||||
            tick_pos -= f_char_length;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Green inline colourisation.
 | 
			
		||||
    else if (f_character == "`" and !next_character_is_not_special)
 | 
			
		||||
    {
 | 
			
		||||
        if (!inline_colour_stack.empty())
 | 
			
		||||
        {
 | 
			
		||||
            if (inline_colour_stack.top() == INLINE_GREEN)
 | 
			
		||||
            {
 | 
			
		||||
                inline_colour_stack.pop();
 | 
			
		||||
                formatting_char = true;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                inline_colour_stack.push(INLINE_GREEN);
 | 
			
		||||
                formatting_char = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            inline_colour_stack.push(INLINE_GREEN);
 | 
			
		||||
            formatting_char = true;
 | 
			
		||||
        }
 | 
			
		||||
      //Color memes
 | 
			
		||||
      else if (f_character == "`" || f_character == "|")
 | 
			
		||||
      {
 | 
			
		||||
          formatting_char = true;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      next_character_is_not_special = false;
 | 
			
		||||
      if (!inline_colour_stack.empty())
 | 
			
		||||
      {
 | 
			
		||||
          switch (inline_colour_stack.top()) {
 | 
			
		||||
          case INLINE_ORANGE:
 | 
			
		||||
              ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(ORANGE)).name() +"\">" + f_character + "</font>");
 | 
			
		||||
              break;
 | 
			
		||||
          case INLINE_BLUE:
 | 
			
		||||
              ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(BLUE)).name() +"\">" + f_character + "</font>");
 | 
			
		||||
              break;
 | 
			
		||||
          case INLINE_GREEN:
 | 
			
		||||
              ui_vp_message->insertHtml("<font color=\""+ get_text_color(QString::number(GREEN)).name() +"\">" + f_character + "</font>");
 | 
			
		||||
              break;
 | 
			
		||||
          case INLINE_GREY:
 | 
			
		||||
              ui_vp_message->insertHtml("<font color=\""+ get_text_color("_inline_grey").name() +"\">" + f_character + "</font>");
 | 
			
		||||
              break;
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        if (m_chatmessage[TEXT_COLOR].toInt() == RAINBOW)
 | 
			
		||||
        {
 | 
			
		||||
          QString html_color;
 | 
			
		||||
 | 
			
		||||
          switch (rainbow_counter)
 | 
			
		||||
          {
 | 
			
		||||
          case 0:
 | 
			
		||||
            html_color = get_text_color(QString::number(RED)).name();
 | 
			
		||||
            break;
 | 
			
		||||
          case 1:
 | 
			
		||||
            html_color = get_text_color(QString::number(ORANGE)).name();
 | 
			
		||||
            break;
 | 
			
		||||
          case 2:
 | 
			
		||||
            html_color = get_text_color(QString::number(YELLOW)).name();
 | 
			
		||||
            break;
 | 
			
		||||
          case 3:
 | 
			
		||||
            html_color = get_text_color(QString::number(GREEN)).name();
 | 
			
		||||
            break;
 | 
			
		||||
          default:
 | 
			
		||||
            html_color = get_text_color(QString::number(BLUE)).name();
 | 
			
		||||
            rainbow_counter = -1;
 | 
			
		||||
          }
 | 
			
		||||
    tick_pos += f_char_length;
 | 
			
		||||
 | 
			
		||||
          ++rainbow_counter;
 | 
			
		||||
 | 
			
		||||
          ui_vp_message->insertHtml("<font color=\"" + html_color + "\">" + f_character + "</font>");
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
          ui_vp_message->insertHtml(f_character);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (message_is_centered)
 | 
			
		||||
      {
 | 
			
		||||
          ui_vp_message->setAlignment(Qt::AlignCenter);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
          ui_vp_message->setAlignment(Qt::AlignLeft);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    //Do the colors, gradual showing, etc. in here
 | 
			
		||||
    ui_vp_message->setHtml(additive_previous + filter_ic_text(f_message, true, tick_pos, m_chatmessage[TEXT_COLOR].toInt()));
 | 
			
		||||
 | 
			
		||||
    //If the text overflows, make it snap to bottom
 | 
			
		||||
    QScrollBar *scroll = ui_vp_message->verticalScrollBar();
 | 
			
		||||
    scroll->setValue(scroll->maximum());
 | 
			
		||||
 | 
			
		||||
@ -2773,8 +2608,6 @@ void Courtroom::chat_tick()
 | 
			
		||||
      ++blip_pos;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    tick_pos += f_char_length;
 | 
			
		||||
 | 
			
		||||
    // If we had a formatting char, we shouldn't wait so long again, as it won't appear!
 | 
			
		||||
    if (formatting_char)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -436,42 +436,40 @@ QColor AOApplication::get_chat_color(QString p_identifier, QString p_chat)
 | 
			
		||||
{
 | 
			
		||||
  QColor return_color(255, 255, 255);
 | 
			
		||||
 | 
			
		||||
  if (p_identifier == "_inline_grey")
 | 
			
		||||
  {
 | 
			
		||||
    return_color = QColor(187, 187, 187);
 | 
			
		||||
  switch (p_identifier.toInt()) {
 | 
			
		||||
    case WHITE:
 | 
			
		||||
    case GREEN:
 | 
			
		||||
      return_color = QColor(0, 255, 0);
 | 
			
		||||
      break;
 | 
			
		||||
    case RED:
 | 
			
		||||
      return_color = QColor(255, 0, 0);
 | 
			
		||||
      break;
 | 
			
		||||
    case ORANGE:
 | 
			
		||||
      return_color = QColor(255, 165, 0);
 | 
			
		||||
      break;
 | 
			
		||||
    case BLUE:
 | 
			
		||||
      return_color = QColor(45, 150, 255);
 | 
			
		||||
      break;
 | 
			
		||||
    case YELLOW:
 | 
			
		||||
      return_color = QColor(255, 255, 0);
 | 
			
		||||
      break;
 | 
			
		||||
    case RAINBOW: // 6 is rainbow.
 | 
			
		||||
    case PINK:
 | 
			
		||||
      return_color = QColor(255, 192, 203);
 | 
			
		||||
      break;
 | 
			
		||||
    case CYAN:
 | 
			
		||||
      return_color = QColor(0, 255, 255);
 | 
			
		||||
      break;
 | 
			
		||||
    case GRAY:
 | 
			
		||||
      return_color = QColor(187, 187, 187);
 | 
			
		||||
      break;
 | 
			
		||||
    case BLANK:
 | 
			
		||||
      return_color = QColor(0, 0, 0, 0);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      return_color = QColor(255, 255, 255);
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    switch (p_identifier.toInt()) {
 | 
			
		||||
      case 1:
 | 
			
		||||
        return_color = QColor(0, 255, 0);
 | 
			
		||||
        break;
 | 
			
		||||
      case 2:
 | 
			
		||||
        return_color = QColor(255, 0, 0);
 | 
			
		||||
        break;
 | 
			
		||||
      case 3:
 | 
			
		||||
        return_color = QColor(255, 165, 0);
 | 
			
		||||
        break;
 | 
			
		||||
      case 4:
 | 
			
		||||
        return_color = QColor(45, 150, 255);
 | 
			
		||||
        break;
 | 
			
		||||
      case 5:
 | 
			
		||||
        return_color = QColor(255, 255, 0);
 | 
			
		||||
        break;
 | 
			
		||||
      case 7:
 | 
			
		||||
        return_color = QColor(255, 192, 203);
 | 
			
		||||
        break;
 | 
			
		||||
      case 8:
 | 
			
		||||
        return_color = QColor(0, 255, 255);
 | 
			
		||||
        break;
 | 
			
		||||
      case 0:
 | 
			
		||||
      case 6: // 6 is rainbow.
 | 
			
		||||
      default:
 | 
			
		||||
        return_color = QColor(255, 255, 255);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  p_identifier = p_identifier.prepend("c");
 | 
			
		||||
  QString design_ini_path = get_base_path() + "misc/" + p_chat + "/config.ini";
 | 
			
		||||
  QString default_path = get_base_path() + "misc/default/config.ini";
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user