Perform clang-format

If you don't want to see this commit on blames, use the hidden
whitespace option on GitHub, or use `-w` in git-blame.
This commit is contained in:
oldmud0 2020-05-22 17:13:17 -05:00
parent 156a760eba
commit 8928aa2718
73 changed files with 3765 additions and 3920 deletions

2
.clang-format Normal file
View File

@ -0,0 +1,2 @@
BasedOnStyle: LLVM
BreakBeforeBraces: Stroustrup

View File

@ -6,30 +6,29 @@
#include "discord_rich_presence.h" #include "discord_rich_presence.h"
#include <QApplication> #include <QApplication>
#include <QVector>
#include <QFile> #include <QFile>
#include <QSettings> #include <QSettings>
#include <QVector>
#include <QDebug> #include <QDebug>
#include <QRect>
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QRect>
#include <QCryptographicHash> #include <QCryptographicHash>
#include <QDir> #include <QDir>
#include <QStandardPaths> #include <QStandardPaths>
#include <QTextStream>
#include <QStringList>
#include <QColor> #include <QColor>
#include <QScreen> #include <QScreen>
#include <QStringList>
#include <QTextStream>
class NetworkManager; class NetworkManager;
class Lobby; class Lobby;
class Courtroom; class Courtroom;
class AOApplication : public QApplication class AOApplication : public QApplication {
{
Q_OBJECT Q_OBJECT
public: public:
@ -78,7 +77,7 @@ public:
///////////////loading info/////////////////// ///////////////loading info///////////////////
//player number, it's hardly used but might be needed for some old servers // player number, it's hardly used but might be needed for some old servers
int s_pv = 0; int s_pv = 0;
QString server_software = ""; QString server_software = "";
@ -103,19 +102,19 @@ public:
/////////////////////////////////////////// ///////////////////////////////////////////
void set_favorite_list(); void set_favorite_list();
QVector<server_type>& get_favorite_list() {return favorite_list;} QVector<server_type> &get_favorite_list() { return favorite_list; }
void add_favorite_server(int p_server); void add_favorite_server(int p_server);
void set_server_list(); void set_server_list();
QVector<server_type>& get_server_list() {return server_list;} QVector<server_type> &get_server_list() { return server_list; }
//reads the theme from config.ini and sets it accordingly // reads the theme from config.ini and sets it accordingly
void reload_theme(); void reload_theme();
//Returns the character the player has currently selected // Returns the character the player has currently selected
QString get_current_char(); QString get_current_char();
//implementation in path_functions.cpp // implementation in path_functions.cpp
QString get_base_path(); QString get_base_path();
QString get_data_path(); QString get_data_path();
QString get_theme_path(QString p_file); QString get_theme_path(QString p_file);
@ -135,25 +134,26 @@ public:
// Instead of reinventing the wheel, we'll use a QSettings class. // Instead of reinventing the wheel, we'll use a QSettings class.
QSettings *configini; QSettings *configini;
//Reads the theme from config.ini and loads it into the current_theme variable // Reads the theme from config.ini and loads it into the current_theme
// variable
QString read_theme(); QString read_theme();
//Returns the value of ooc_name in config.ini // Returns the value of ooc_name in config.ini
QString get_ooc_name(); QString get_ooc_name();
//Returns the blip rate from config.ini // Returns the blip rate from config.ini
int read_blip_rate(); int read_blip_rate();
//Returns true if blank blips is enabled in config.ini and false otherwise // Returns true if blank blips is enabled in config.ini and false otherwise
bool get_blank_blip(); bool get_blank_blip();
//Returns the value of default_music in config.ini // Returns the value of default_music in config.ini
int get_default_music(); int get_default_music();
//Returns the value of default_sfx in config.ini // Returns the value of default_sfx in config.ini
int get_default_sfx(); int get_default_sfx();
//Returns the value of default_blip in config.ini // Returns the value of default_blip in config.ini
int get_default_blip(); int get_default_blip();
// Returns the value of whether Discord should be enabled on startup // Returns the value of whether Discord should be enabled on startup
@ -177,101 +177,102 @@ public:
// Returns whether the user would like to have custom shownames on by default. // Returns whether the user would like to have custom shownames on by default.
bool get_showname_enabled_by_default(); bool get_showname_enabled_by_default();
//Returns the list of words in callwords.ini // Returns the list of words in callwords.ini
QStringList get_call_words(); QStringList get_call_words();
//Appends the argument string to serverlist.txt // Appends the argument string to serverlist.txt
void write_to_serverlist_txt(QString p_line); void write_to_serverlist_txt(QString p_line);
//Returns the contents of serverlist.txt // Returns the contents of serverlist.txt
QVector<server_type> read_serverlist_txt(); QVector<server_type> read_serverlist_txt();
//Returns the value of p_identifier in the design.ini file in p_design_path // Returns the value of p_identifier in the design.ini file in p_design_path
QString read_design_ini(QString p_identifier, QString p_design_path); QString read_design_ini(QString p_identifier, QString p_design_path);
//Returns the coordinates of widget with p_identifier from p_file // Returns the coordinates of widget with p_identifier from p_file
QPoint get_button_spacing(QString p_identifier, QString p_file); QPoint get_button_spacing(QString p_identifier, QString p_file);
//Returns the dimensions of widget with specified identifier from p_file // Returns the dimensions of widget with specified identifier from p_file
pos_size_type get_element_dimensions(QString p_identifier, QString p_file); pos_size_type get_element_dimensions(QString p_identifier, QString p_file);
//Returns the name of the font with p_identifier from p_file // Returns the name of the font with p_identifier from p_file
QString get_font_name(QString p_identifier, QString p_file); QString get_font_name(QString p_identifier, QString p_file);
// Returns the value of font_size with p_identifier from p_file
//Returns the value of font_size with p_identifier from p_file
int get_font_size(QString p_identifier, QString p_file); int get_font_size(QString p_identifier, QString p_file);
//Returns the color with p_identifier from p_file // Returns the color with p_identifier from p_file
QColor get_color(QString p_identifier, QString p_file); QColor get_color(QString p_identifier, QString p_file);
// Returns the colour from the misc folder. // Returns the colour from the misc folder.
QColor get_chat_color(QString p_identifier, QString p_chat); QColor get_chat_color(QString p_identifier, QString p_chat);
//Returns the sfx with p_identifier from sounds.ini in the current theme path // Returns the sfx with p_identifier from sounds.ini in the current theme path
QString get_sfx(QString p_identifier); QString get_sfx(QString p_identifier);
//Figure out if we can opus this or if we should fall back to wav // Figure out if we can opus this or if we should fall back to wav
QString get_sfx_suffix(QString sound_to_check); QString get_sfx_suffix(QString sound_to_check);
// Can we use APNG for this? If not, fall back to a gif. // Can we use APNG for this? If not, fall back to a gif.
QString get_image_suffix(QString path_to_check); QString get_image_suffix(QString path_to_check);
//Returns the value of p_search_line within target_tag and terminator_tag // Returns the value of p_search_line within target_tag and terminator_tag
QString read_char_ini(QString p_char, QString p_search_line, QString target_tag); QString read_char_ini(QString p_char, QString p_search_line,
QString target_tag);
//Returns the side of the p_char character from that characters ini file // Returns the side of the p_char character from that characters ini file
QString get_char_side(QString p_char); QString get_char_side(QString p_char);
//Returns the showname from the ini of p_char // Returns the showname from the ini of p_char
QString get_showname(QString p_char); QString get_showname(QString p_char);
//Returns the value of chat from the specific p_char's ini file // Returns the value of chat from the specific p_char's ini file
QString get_chat(QString p_char); QString get_chat(QString p_char);
//Returns the value of shouts from the specified p_char's ini file // Returns the value of shouts from the specified p_char's ini file
QString get_char_shouts(QString p_char); QString get_char_shouts(QString p_char);
//Returns the preanim duration of p_char's p_emote // Returns the preanim duration of p_char's p_emote
int get_preanim_duration(QString p_char, QString p_emote); int get_preanim_duration(QString p_char, QString p_emote);
//Same as above, but only returns if it has a % in front(refer to Preanims section in the manual) // Same as above, but only returns if it has a % in front(refer to Preanims
// section in the manual)
int get_ao2_preanim_duration(QString p_char, QString p_emote); int get_ao2_preanim_duration(QString p_char, QString p_emote);
//Not in use // Not in use
int get_text_delay(QString p_char, QString p_emote); int get_text_delay(QString p_char, QString p_emote);
// Returns the custom realisation used by the character. // Returns the custom realisation used by the character.
QString get_custom_realization(QString p_char); QString get_custom_realization(QString p_char);
//Returns the name of p_char // Returns the name of p_char
QString get_char_name(QString p_char); QString get_char_name(QString p_char);
//Returns the total amount of emotes of p_char // Returns the total amount of emotes of p_char
int get_emote_number(QString p_char); int get_emote_number(QString p_char);
//Returns the emote comment of p_char's p_emote // Returns the emote comment of p_char's p_emote
QString get_emote_comment(QString p_char, int p_emote); QString get_emote_comment(QString p_char, int p_emote);
//Returns the base name of p_char's p_emote // Returns the base name of p_char's p_emote
QString get_emote(QString p_char, int p_emote); QString get_emote(QString p_char, int p_emote);
//Returns the preanimation name of p_char's p_emote // Returns the preanimation name of p_char's p_emote
QString get_pre_emote(QString p_char, int p_emote); QString get_pre_emote(QString p_char, int p_emote);
//Returns the sfx of p_char's p_emote // Returns the sfx of p_char's p_emote
QString get_sfx_name(QString p_char, int p_emote); QString get_sfx_name(QString p_char, int p_emote);
//Not in use // Not in use
int get_sfx_delay(QString p_char, int p_emote); int get_sfx_delay(QString p_char, int p_emote);
//Returns the modifier for p_char's p_emote // Returns the modifier for p_char's p_emote
int get_emote_mod(QString p_char, int p_emote); int get_emote_mod(QString p_char, int p_emote);
//Returns the desk modifier for p_char's p_emote // Returns the desk modifier for p_char's p_emote
int get_desk_mod(QString p_char, int p_emote); int get_desk_mod(QString p_char, int p_emote);
//Returns p_char's gender // Returns p_char's gender
QString get_gender(QString p_char); QString get_gender(QString p_char);
// ====== // ======

View File

@ -9,13 +9,11 @@
#include "aoapplication.h" #include "aoapplication.h"
#include <QDebug>
#include <QWidget> #include <QWidget>
#include <string.h> #include <string.h>
#include <QDebug>
class AOBlipPlayer {
class AOBlipPlayer
{
public: public:
AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app); AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app);
@ -30,11 +28,11 @@ private:
AOApplication *ao_app; AOApplication *ao_app;
int m_volume; int m_volume;
#if defined(BASSAUDIO) #if defined(BASSAUDIO)
HSTREAM m_stream_list[5]; HSTREAM m_stream_list[5];
#elif defined(QTAUDIO) #elif defined(QTAUDIO)
QSoundEffect m_blips; QSoundEffect m_blips;
#endif #endif
}; };
#endif // AOBLIPPLAYER_H #endif // AOBLIPPLAYER_H

View File

@ -3,11 +3,10 @@
#include "aoapplication.h" #include "aoapplication.h"
#include <QPushButton>
#include <QDebug> #include <QDebug>
#include <QPushButton>
class AOButton : public QPushButton class AOButton : public QPushButton {
{
Q_OBJECT Q_OBJECT
public: public:

View File

@ -4,20 +4,21 @@
#include "aoapplication.h" #include "aoapplication.h"
#include "courtroom.h" #include "courtroom.h"
#include <QtWidgets/QDialog>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QCheckBox> #include <QtWidgets/QCheckBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QLabel> #include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit> #include <QtWidgets/QLineEdit>
#include <QtWidgets/QVBoxLayout>
class AOCaseAnnouncerDialog : public QDialog class AOCaseAnnouncerDialog : public QDialog {
{
Q_OBJECT Q_OBJECT
public: public:
explicit AOCaseAnnouncerDialog(QWidget *parent = nullptr, AOApplication *p_ao_app = nullptr, Courtroom *p_court = nullptr); explicit AOCaseAnnouncerDialog(QWidget *parent = nullptr,
AOApplication *p_ao_app = nullptr,
Courtroom *p_court = nullptr);
private: private:
AOApplication *ao_app; AOApplication *ao_app;

View File

@ -4,17 +4,17 @@
#include "aoapplication.h" #include "aoapplication.h"
#include "aoimage.h" #include "aoimage.h"
#include <QFile>
#include <QPushButton> #include <QPushButton>
#include <QString> #include <QString>
#include <QWidget> #include <QWidget>
#include <QFile>
class AOCharButton : public QPushButton class AOCharButton : public QPushButton {
{
Q_OBJECT Q_OBJECT
public: public:
AOCharButton(QWidget *parent, AOApplication *p_ao_app, int x_pos, int y_pos, bool is_taken); AOCharButton(QWidget *parent, AOApplication *p_ao_app, int x_pos, int y_pos,
bool is_taken);
AOApplication *ao_app; AOApplication *ao_app;

View File

@ -1,16 +1,15 @@
#ifndef AOCHARMOVIE_H #ifndef AOCHARMOVIE_H
#define AOCHARMOVIE_H #define AOCHARMOVIE_H
#include <QMovie>
#include <QLabel>
#include <QTimer>
#include <QDebug> #include <QDebug>
#include <QImageReader> #include <QImageReader>
#include <QLabel>
#include <QMovie>
#include <QTimer>
class AOApplication; class AOApplication;
class AOCharMovie : public QLabel class AOCharMovie : public QLabel {
{
Q_OBJECT Q_OBJECT
public: public:
@ -21,7 +20,7 @@ public:
void play_talking(QString p_char, QString p_emote); void play_talking(QString p_char, QString p_emote);
void play_idle(QString p_char, QString p_emote); void play_idle(QString p_char, QString p_emote);
void set_flipped(bool p_flipped) {m_flipped = p_flipped;} void set_flipped(bool p_flipped) { m_flipped = p_flipped; }
void stop(); void stop();
@ -38,7 +37,8 @@ private:
const int time_mod = 62; const int time_mod = 62;
// These are the X and Y values before they are fixed based on the sprite's width. // These are the X and Y values before they are fixed based on the sprite's
// width.
int x = 0; int x = 0;
int y = 0; int y = 0;

View File

@ -3,22 +3,21 @@
#include "aoapplication.h" #include "aoapplication.h"
#include <QPushButton>
#include <QDebug> #include <QDebug>
#include <QPushButton>
class AOEmoteButton : public QPushButton class AOEmoteButton : public QPushButton {
{
Q_OBJECT Q_OBJECT
public: public:
AOEmoteButton(QWidget *p_parent, AOApplication *p_ao_app, int p_x, int p_y); AOEmoteButton(QWidget *p_parent, AOApplication *p_ao_app, int p_x, int p_y);
//void set_on(QString p_char, int p_emote); // void set_on(QString p_char, int p_emote);
//void set_off(QString p_char, int p_emote); // void set_off(QString p_char, int p_emote);
void set_image(QString p_char, int p_emote, QString suffix); void set_image(QString p_char, int p_emote, QString suffix);
void set_id(int p_id) {m_id = p_id;} void set_id(int p_id) { m_id = p_id; }
int get_id() {return m_id;} int get_id() { return m_id; }
private: private:
QWidget *parent; QWidget *parent;

View File

@ -4,21 +4,21 @@
#include "aoapplication.h" #include "aoapplication.h"
#include "aoimage.h" #include "aoimage.h"
#include <QDebug>
#include <QPushButton> #include <QPushButton>
#include <QString> #include <QString>
#include <QDebug>
class AOEvidenceButton : public QPushButton class AOEvidenceButton : public QPushButton {
{
Q_OBJECT Q_OBJECT
public: public:
AOEvidenceButton(QWidget *p_parent, AOApplication *p_ao_app, int p_x, int p_y); AOEvidenceButton(QWidget *p_parent, AOApplication *p_ao_app, int p_x,
int p_y);
void reset(); void reset();
void set_image(QString p_image); void set_image(QString p_image);
void set_theme_image(QString p_image); void set_theme_image(QString p_image);
void set_id(int p_id) {m_id = p_id;} void set_id(int p_id) { m_id = p_id; }
void set_selected(bool p_selected); void set_selected(bool p_selected);

View File

@ -4,19 +4,18 @@
#include "aoapplication.h" #include "aoapplication.h"
#include "aosfxplayer.h" #include "aosfxplayer.h"
#include <QDebug>
#include <QLabel> #include <QLabel>
#include <QMovie> #include <QMovie>
#include <QDebug>
class AOEvidenceDisplay : public QLabel class AOEvidenceDisplay : public QLabel {
{
Q_OBJECT Q_OBJECT
public: public:
AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app); AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app);
void show_evidence(QString p_evidence_image, bool is_left_side, int p_volume); void show_evidence(QString p_evidence_image, bool is_left_side, int p_volume);
QLabel* get_evidence_icon(); QLabel *get_evidence_icon();
void reset(); void reset();
private: private:

View File

@ -1,15 +1,14 @@
//This class represents a static theme-dependent image // This class represents a static theme-dependent image
#ifndef AOIMAGE_H #ifndef AOIMAGE_H
#define AOIMAGE_H #define AOIMAGE_H
#include "aoapplication.h" #include "aoapplication.h"
#include <QLabel>
#include <QDebug> #include <QDebug>
#include <QLabel>
class AOImage : public QLabel class AOImage : public QLabel {
{
public: public:
AOImage(QWidget *parent, AOApplication *p_ao_app); AOImage(QWidget *parent, AOApplication *p_ao_app);
~AOImage(); ~AOImage();

View File

@ -4,8 +4,7 @@
#include <QLineEdit> #include <QLineEdit>
#include <QMouseEvent> #include <QMouseEvent>
class AOLineEdit : public QLineEdit class AOLineEdit : public QLineEdit {
{
Q_OBJECT Q_OBJECT
public: public:
@ -19,8 +18,6 @@ signals:
private slots: private slots:
void on_enter_pressed(); void on_enter_pressed();
}; };
#endif // AOLINEEDIT_H #endif // AOLINEEDIT_H

View File

@ -7,8 +7,7 @@
class Courtroom; class Courtroom;
class AOApplication; class AOApplication;
class AOMovie : public QLabel class AOMovie : public QLabel {
{
Q_OBJECT Q_OBJECT
public: public:

View File

@ -8,13 +8,12 @@
#endif #endif
#include "aoapplication.h" #include "aoapplication.h"
#include <QDebug>
#include <QWidget> #include <QWidget>
#include <string.h> #include <string.h>
#include <QDebug>
#if defined(BASSAUDIO) #if defined(BASSAUDIO)
class AOMusicPlayer class AOMusicPlayer {
{
public: public:
AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app); AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app);
~AOMusicPlayer(); ~AOMusicPlayer();
@ -30,8 +29,7 @@ private:
HSTREAM m_stream; HSTREAM m_stream;
}; };
#elif defined(QTAUDIO) #elif defined(QTAUDIO)
class AOMusicPlayer class AOMusicPlayer {
{
public: public:
AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app); AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app);
~AOMusicPlayer(); ~AOMusicPlayer();
@ -47,8 +45,7 @@ private:
int m_volume = 0; int m_volume = 0;
}; };
#else #else
class AOMusicPlayer class AOMusicPlayer {
{
public: public:
AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app); AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app);
~AOMusicPlayer(); ~AOMusicPlayer();

View File

@ -23,11 +23,11 @@
#include <QDirIterator> #include <QDirIterator>
#include <QTextStream> #include <QTextStream>
class AOOptionsDialog: public QDialog class AOOptionsDialog : public QDialog {
{
Q_OBJECT Q_OBJECT
public: public:
explicit AOOptionsDialog(QWidget *parent = nullptr, AOApplication *p_ao_app = nullptr); explicit AOOptionsDialog(QWidget *parent = nullptr,
AOApplication *p_ao_app = nullptr);
private: private:
AOApplication *ao_app; AOApplication *ao_app;

View File

@ -1,19 +1,18 @@
#ifndef AOPACKET_H #ifndef AOPACKET_H
#define AOPACKET_H #define AOPACKET_H
#include <QDebug>
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include <QDebug>
class AOPacket class AOPacket {
{
public: public:
AOPacket(QString p_packet_string); AOPacket(QString p_packet_string);
AOPacket(QString header, QStringList &p_contents); AOPacket(QString header, QStringList &p_contents);
~AOPacket(); ~AOPacket();
QString get_header() {return m_header;} QString get_header() { return m_header; }
QStringList &get_contents() {return m_contents;} QStringList &get_contents() { return m_contents; }
QString to_string(); QString to_string();
void encrypt_header(unsigned int p_key); void encrypt_header(unsigned int p_key);

View File

@ -1,15 +1,14 @@
#ifndef AOSCENE_H #ifndef AOSCENE_H
#define AOSCENE_H #define AOSCENE_H
#include <QLabel>
#include <QDebug> #include <QDebug>
#include <QLabel>
#include <QMovie> #include <QMovie>
class Courtroom; class Courtroom;
class AOApplication; class AOApplication;
class AOScene : public QLabel class AOScene : public QLabel {
{
Q_OBJECT Q_OBJECT
public: public:
explicit AOScene(QWidget *parent, AOApplication *p_ao_app); explicit AOScene(QWidget *parent, AOApplication *p_ao_app);
@ -21,7 +20,6 @@ private:
QWidget *m_parent; QWidget *m_parent;
QMovie *m_movie; QMovie *m_movie;
AOApplication *ao_app; AOApplication *ao_app;
}; };
#endif // AOSCENE_H #endif // AOSCENE_H

View File

@ -9,12 +9,11 @@
#include "aoapplication.h" #include "aoapplication.h"
#include <QDebug>
#include <QWidget> #include <QWidget>
#include <string.h> #include <string.h>
#include <QDebug>
class AOSfxPlayer class AOSfxPlayer {
{
public: public:
AOSfxPlayer(QWidget *parent, AOApplication *p_ao_app); AOSfxPlayer(QWidget *parent, AOApplication *p_ao_app);
@ -25,11 +24,11 @@ public:
private: private:
QWidget *m_parent; QWidget *m_parent;
AOApplication *ao_app; AOApplication *ao_app;
#if defined(BASSAUDIO) #if defined(BASSAUDIO)
HSTREAM m_stream; HSTREAM m_stream;
#elif defined(QTAUDIO) #elif defined(QTAUDIO)
QSoundEffect m_sfx; QSoundEffect m_sfx;
#endif #endif
int m_volume = 0; int m_volume = 0;
}; };

View File

@ -1,14 +1,13 @@
#ifndef AOTEXTAREA_H #ifndef AOTEXTAREA_H
#define AOTEXTAREA_H #define AOTEXTAREA_H
#include <QTextBrowser>
#include <QScrollBar>
#include <QTextCursor>
#include <QRegExp>
#include <QDebug> #include <QDebug>
#include <QRegExp>
#include <QScrollBar>
#include <QTextBrowser>
#include <QTextCursor>
class AOTextArea : public QTextBrowser class AOTextArea : public QTextBrowser {
{
public: public:
AOTextArea(QWidget *p_parent = nullptr); AOTextArea(QWidget *p_parent = nullptr);
@ -18,7 +17,8 @@ public:
private: private:
const QRegExp omnis_dank_url_regex = QRegExp("\\b(https?://\\S+\\.\\S+)\\b"); const QRegExp omnis_dank_url_regex = QRegExp("\\b(https?://\\S+\\.\\S+)\\b");
void auto_scroll(QTextCursor old_cursor, int scrollbar_value, bool is_scrolled_down); void auto_scroll(QTextCursor old_cursor, int scrollbar_value,
bool is_scrolled_down);
}; };
#endif // AOTEXTAREA_H #endif // AOTEXTAREA_H

View File

@ -3,8 +3,7 @@
#include <QPlainTextEdit> #include <QPlainTextEdit>
class AOTextEdit : public QPlainTextEdit class AOTextEdit : public QPlainTextEdit {
{
Q_OBJECT Q_OBJECT
public: public:
AOTextEdit(QWidget *parent); AOTextEdit(QWidget *parent);
@ -17,7 +16,6 @@ signals:
private slots: private slots:
void on_enter_pressed(); void on_enter_pressed();
}; };
#endif // AOTEXTEDIT_H #endif // AOTEXTEDIT_H

View File

@ -27,11 +27,11 @@ typedef int BOOL;
#define FALSE 0 #define FALSE 0
#endif #endif
#define LOBYTE(a) (BYTE)(a) #define LOBYTE(a) (BYTE)(a)
#define HIBYTE(a) (BYTE)((a)>>8) #define HIBYTE(a) (BYTE)((a) >> 8)
#define LOWORD(a) (WORD)(a) #define LOWORD(a) (WORD)(a)
#define HIWORD(a) (WORD)((a)>>16) #define HIWORD(a) (WORD)((a) >> 16)
#define MAKEWORD(a,b) (WORD)(((a)&0xff)|((b)<<8)) #define MAKEWORD(a, b) (WORD)(((a)&0xff) | ((b) << 8))
#define MAKELONG(a,b) (DWORD)(((a)&0xffff)|((b)<<16)) #define MAKELONG(a, b) (DWORD)(((a)&0xffff) | ((b) << 16))
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
@ -153,7 +153,8 @@ typedef DWORD HPLUGIN; // Plugin handle
#define BASS_DEVICE_3D 4 // enable 3D functionality #define BASS_DEVICE_3D 4 // enable 3D functionality
#define BASS_DEVICE_16BITS 8 // limit output to 16 bit #define BASS_DEVICE_16BITS 8 // limit output to 16 bit
#define BASS_DEVICE_LATENCY 0x100 // calculate device latency (BASS_INFO struct) #define BASS_DEVICE_LATENCY 0x100 // calculate device latency (BASS_INFO struct)
#define BASS_DEVICE_CPSPEAKERS 0x400 // detect speakers via Windows control panel #define BASS_DEVICE_CPSPEAKERS \
0x400 // detect speakers via Windows control panel
#define BASS_DEVICE_SPEAKERS 0x800 // force enabling of speaker assignment #define BASS_DEVICE_SPEAKERS 0x800 // force enabling of speaker assignment
#define BASS_DEVICE_NOSPEAKER 0x1000 // ignore speaker arrangement #define BASS_DEVICE_NOSPEAKER 0x1000 // ignore speaker arrangement
#define BASS_DEVICE_DMIX 0x2000 // use ALSA "dmix" plugin #define BASS_DEVICE_DMIX 0x2000 // use ALSA "dmix" plugin
@ -169,7 +170,8 @@ typedef DWORD HPLUGIN; // Plugin handle
// Device info structure // Device info structure
typedef struct { typedef struct {
#if defined(_WIN32_WCE) || (WINAPI_FAMILY && WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP) #if defined(_WIN32_WCE) || \
(WINAPI_FAMILY && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
const wchar_t *name; // description const wchar_t *name; // description
const wchar_t *driver; // driver const wchar_t *driver; // driver
#else #else
@ -209,19 +211,25 @@ typedef struct {
DWORD free3d; // number of free 3D sample slots in the hardware DWORD free3d; // number of free 3D sample slots in the hardware
DWORD minrate; // min sample rate supported by the hardware DWORD minrate; // min sample rate supported by the hardware
DWORD maxrate; // max sample rate supported by the hardware DWORD maxrate; // max sample rate supported by the hardware
BOOL eax; // device supports EAX? (always FALSE if BASS_DEVICE_3D was not used) BOOL
DWORD minbuf; // recommended minimum buffer length in ms (requires BASS_DEVICE_LATENCY) eax; // device supports EAX? (always FALSE if BASS_DEVICE_3D was not used)
DWORD minbuf; // recommended minimum buffer length in ms (requires
// BASS_DEVICE_LATENCY)
DWORD dsver; // DirectSound version DWORD dsver; // DirectSound version
DWORD latency; // delay (in ms) before start of playback (requires BASS_DEVICE_LATENCY) DWORD latency; // delay (in ms) before start of playback (requires
// BASS_DEVICE_LATENCY)
DWORD initflags; // BASS_Init "flags" parameter DWORD initflags; // BASS_Init "flags" parameter
DWORD speakers; // number of speakers available DWORD speakers; // number of speakers available
DWORD freq; // current output rate DWORD freq; // current output rate
} BASS_INFO; } BASS_INFO;
// BASS_INFO flags (from DSOUND.H) // BASS_INFO flags (from DSOUND.H)
#define DSCAPS_CONTINUOUSRATE 0x00000010 // supports all sample rates between min/maxrate #define DSCAPS_CONTINUOUSRATE \
#define DSCAPS_EMULDRIVER 0x00000020 // device does NOT have hardware DirectSound support 0x00000010 // supports all sample rates between min/maxrate
#define DSCAPS_CERTIFIED 0x00000040 // device driver has been certified by Microsoft #define DSCAPS_EMULDRIVER \
0x00000020 // device does NOT have hardware DirectSound support
#define DSCAPS_CERTIFIED \
0x00000040 // device driver has been certified by Microsoft
#define DSCAPS_SECONDARYMONO 0x00000100 // mono #define DSCAPS_SECONDARYMONO 0x00000100 // mono
#define DSCAPS_SECONDARYSTEREO 0x00000200 // stereo #define DSCAPS_SECONDARYSTEREO 0x00000200 // stereo
#define DSCAPS_SECONDARY8BIT 0x00000400 // 8 bit #define DSCAPS_SECONDARY8BIT 0x00000400 // 8 bit
@ -237,8 +245,11 @@ typedef struct {
} BASS_RECORDINFO; } BASS_RECORDINFO;
// BASS_RECORDINFO flags (from DSOUND.H) // BASS_RECORDINFO flags (from DSOUND.H)
#define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER // device does NOT have hardware DirectSound recording support #define DSCCAPS_EMULDRIVER \
#define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED // device driver has been certified by Microsoft DSCAPS_EMULDRIVER // device does NOT have hardware DirectSound recording
// support
#define DSCCAPS_CERTIFIED \
DSCAPS_CERTIFIED // device driver has been certified by Microsoft
// defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H) // defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
#ifndef WAVE_FORMAT_1M08 #ifndef WAVE_FORMAT_1M08
@ -288,16 +299,24 @@ typedef struct {
#define BASS_SAMPLE_FX 128 // old implementation of DX8 effects #define BASS_SAMPLE_FX 128 // old implementation of DX8 effects
#define BASS_SAMPLE_OVER_VOL 0x10000 // override lowest volume #define BASS_SAMPLE_OVER_VOL 0x10000 // override lowest volume
#define BASS_SAMPLE_OVER_POS 0x20000 // override longest playing #define BASS_SAMPLE_OVER_POS 0x20000 // override longest playing
#define BASS_SAMPLE_OVER_DIST 0x30000 // override furthest from listener (3D only) #define BASS_SAMPLE_OVER_DIST \
0x30000 // override furthest from listener (3D only)
#define BASS_STREAM_PRESCAN 0x20000 // enable pin-point seeking/length (MP3/MP2/MP1) #define BASS_STREAM_PRESCAN \
#define BASS_STREAM_AUTOFREE 0x40000 // automatically free the stream when it stop/ends 0x20000 // enable pin-point seeking/length (MP3/MP2/MP1)
#define BASS_STREAM_RESTRATE 0x80000 // restrict the download rate of internet file streams #define BASS_STREAM_AUTOFREE \
#define BASS_STREAM_BLOCK 0x100000 // download/play internet file stream in small blocks 0x40000 // automatically free the stream when it stop/ends
#define BASS_STREAM_DECODE 0x200000 // don't play the stream, only decode (BASS_ChannelGetData) #define BASS_STREAM_RESTRATE \
#define BASS_STREAM_STATUS 0x800000 // give server status info (HTTP/ICY tags) in DOWNLOADPROC 0x80000 // restrict the download rate of internet file streams
#define BASS_STREAM_BLOCK \
0x100000 // download/play internet file stream in small blocks
#define BASS_STREAM_DECODE \
0x200000 // don't play the stream, only decode (BASS_ChannelGetData)
#define BASS_STREAM_STATUS \
0x800000 // give server status info (HTTP/ICY tags) in DOWNLOADPROC
#define BASS_MP3_IGNOREDELAY 0x200 // ignore LAME/Xing/VBRI/iTunes delay & padding info #define BASS_MP3_IGNOREDELAY \
0x200 // ignore LAME/Xing/VBRI/iTunes delay & padding info
#define BASS_MP3_SETPOS BASS_STREAM_PRESCAN #define BASS_MP3_SETPOS BASS_STREAM_PRESCAN
#define BASS_MUSIC_FLOAT BASS_SAMPLE_FLOAT #define BASS_MUSIC_FLOAT BASS_SAMPLE_FLOAT
@ -319,7 +338,8 @@ typedef struct {
#define BASS_MUSIC_NONINTER 0x10000 // non-interpolated sample mixing #define BASS_MUSIC_NONINTER 0x10000 // non-interpolated sample mixing
#define BASS_MUSIC_SINCINTER 0x800000 // sinc interpolated sample mixing #define BASS_MUSIC_SINCINTER 0x800000 // sinc interpolated sample mixing
#define BASS_MUSIC_POSRESET 0x8000 // stop all notes when moving position #define BASS_MUSIC_POSRESET 0x8000 // stop all notes when moving position
#define BASS_MUSIC_POSRESETEX 0x400000 // stop all notes and reset bmp/etc when moving position #define BASS_MUSIC_POSRESETEX \
0x400000 // stop all notes and reset bmp/etc when moving position
#define BASS_MUSIC_STOPBACK 0x80000 // stop the music on a backwards jump effect #define BASS_MUSIC_STOPBACK 0x80000 // stop the music on a backwards jump effect
#define BASS_MUSIC_NOSAMPLE 0x100000 // don't load the samples #define BASS_MUSIC_NOSAMPLE 0x100000 // don't load the samples
@ -328,17 +348,17 @@ typedef struct {
#define BASS_SPEAKER_REAR 0x2000000 // rear/side speakers #define BASS_SPEAKER_REAR 0x2000000 // rear/side speakers
#define BASS_SPEAKER_CENLFE 0x3000000 // center & LFE speakers (5.1) #define BASS_SPEAKER_CENLFE 0x3000000 // center & LFE speakers (5.1)
#define BASS_SPEAKER_REAR2 0x4000000 // rear center speakers (7.1) #define BASS_SPEAKER_REAR2 0x4000000 // rear center speakers (7.1)
#define BASS_SPEAKER_N(n) ((n)<<24) // n'th pair of speakers (max 15) #define BASS_SPEAKER_N(n) ((n) << 24) // n'th pair of speakers (max 15)
#define BASS_SPEAKER_LEFT 0x10000000 // modifier: left #define BASS_SPEAKER_LEFT 0x10000000 // modifier: left
#define BASS_SPEAKER_RIGHT 0x20000000 // modifier: right #define BASS_SPEAKER_RIGHT 0x20000000 // modifier: right
#define BASS_SPEAKER_FRONTLEFT BASS_SPEAKER_FRONT|BASS_SPEAKER_LEFT #define BASS_SPEAKER_FRONTLEFT BASS_SPEAKER_FRONT | BASS_SPEAKER_LEFT
#define BASS_SPEAKER_FRONTRIGHT BASS_SPEAKER_FRONT|BASS_SPEAKER_RIGHT #define BASS_SPEAKER_FRONTRIGHT BASS_SPEAKER_FRONT | BASS_SPEAKER_RIGHT
#define BASS_SPEAKER_REARLEFT BASS_SPEAKER_REAR|BASS_SPEAKER_LEFT #define BASS_SPEAKER_REARLEFT BASS_SPEAKER_REAR | BASS_SPEAKER_LEFT
#define BASS_SPEAKER_REARRIGHT BASS_SPEAKER_REAR|BASS_SPEAKER_RIGHT #define BASS_SPEAKER_REARRIGHT BASS_SPEAKER_REAR | BASS_SPEAKER_RIGHT
#define BASS_SPEAKER_CENTER BASS_SPEAKER_CENLFE|BASS_SPEAKER_LEFT #define BASS_SPEAKER_CENTER BASS_SPEAKER_CENLFE | BASS_SPEAKER_LEFT
#define BASS_SPEAKER_LFE BASS_SPEAKER_CENLFE|BASS_SPEAKER_RIGHT #define BASS_SPEAKER_LFE BASS_SPEAKER_CENLFE | BASS_SPEAKER_RIGHT
#define BASS_SPEAKER_REAR2LEFT BASS_SPEAKER_REAR2|BASS_SPEAKER_LEFT #define BASS_SPEAKER_REAR2LEFT BASS_SPEAKER_REAR2 | BASS_SPEAKER_LEFT
#define BASS_SPEAKER_REAR2RIGHT BASS_SPEAKER_REAR2|BASS_SPEAKER_RIGHT #define BASS_SPEAKER_REAR2RIGHT BASS_SPEAKER_REAR2 | BASS_SPEAKER_RIGHT
#define BASS_ASYNCFILE 0x40000000 #define BASS_ASYNCFILE 0x40000000
#define BASS_UNICODE 0x80000000 #define BASS_UNICODE 0x80000000
@ -394,7 +414,8 @@ typedef struct {
typedef struct { typedef struct {
DWORD ctype; // channel type DWORD ctype; // channel type
#if defined(_WIN32_WCE) || (WINAPI_FAMILY && WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP) #if defined(_WIN32_WCE) || \
(WINAPI_FAMILY && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
const wchar_t *name; // format description const wchar_t *name; // format description
const wchar_t *exts; // file extension filter (*.ext1;*.ext2;etc...) const wchar_t *exts; // file extension filter (*.ext1;*.ext2;etc...)
#else #else
@ -412,8 +433,8 @@ typedef struct {
// 3D vector (for 3D positions/velocities/orientations) // 3D vector (for 3D positions/velocities/orientations)
typedef struct BASS_3DVECTOR { typedef struct BASS_3DVECTOR {
#ifdef __cplusplus #ifdef __cplusplus
BASS_3DVECTOR() {}; BASS_3DVECTOR(){};
BASS_3DVECTOR(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}; BASS_3DVECTOR(float _x, float _y, float _z) : x(_x), y(_y), z(_z){};
#endif #endif
float x; // +=right, -=left float x; // +=right, -=left
float y; // +=up, -=down float y; // +=up, -=down
@ -432,8 +453,7 @@ typedef struct BASS_3DVECTOR {
#define BASS_3DALG_LIGHT 3 #define BASS_3DALG_LIGHT 3
// EAX environments, use with BASS_SetEAXParameters // EAX environments, use with BASS_SetEAXParameters
enum enum {
{
EAX_ENVIRONMENT_GENERIC, EAX_ENVIRONMENT_GENERIC,
EAX_ENVIRONMENT_PADDEDCELL, EAX_ENVIRONMENT_PADDEDCELL,
EAX_ENVIRONMENT_ROOM, EAX_ENVIRONMENT_ROOM,
@ -465,48 +485,50 @@ enum
}; };
// EAX presets, usage: BASS_SetEAXParameters(EAX_PRESET_xxx) // EAX presets, usage: BASS_SetEAXParameters(EAX_PRESET_xxx)
#define EAX_PRESET_GENERIC EAX_ENVIRONMENT_GENERIC,0.5F,1.493F,0.5F #define EAX_PRESET_GENERIC EAX_ENVIRONMENT_GENERIC, 0.5F, 1.493F, 0.5F
#define EAX_PRESET_PADDEDCELL EAX_ENVIRONMENT_PADDEDCELL,0.25F,0.1F,0.0F #define EAX_PRESET_PADDEDCELL EAX_ENVIRONMENT_PADDEDCELL, 0.25F, 0.1F, 0.0F
#define EAX_PRESET_ROOM EAX_ENVIRONMENT_ROOM,0.417F,0.4F,0.666F #define EAX_PRESET_ROOM EAX_ENVIRONMENT_ROOM, 0.417F, 0.4F, 0.666F
#define EAX_PRESET_BATHROOM EAX_ENVIRONMENT_BATHROOM,0.653F,1.499F,0.166F #define EAX_PRESET_BATHROOM EAX_ENVIRONMENT_BATHROOM, 0.653F, 1.499F, 0.166F
#define EAX_PRESET_LIVINGROOM EAX_ENVIRONMENT_LIVINGROOM,0.208F,0.478F,0.0F #define EAX_PRESET_LIVINGROOM EAX_ENVIRONMENT_LIVINGROOM, 0.208F, 0.478F, 0.0F
#define EAX_PRESET_STONEROOM EAX_ENVIRONMENT_STONEROOM,0.5F,2.309F,0.888F #define EAX_PRESET_STONEROOM EAX_ENVIRONMENT_STONEROOM, 0.5F, 2.309F, 0.888F
#define EAX_PRESET_AUDITORIUM EAX_ENVIRONMENT_AUDITORIUM,0.403F,4.279F,0.5F #define EAX_PRESET_AUDITORIUM EAX_ENVIRONMENT_AUDITORIUM, 0.403F, 4.279F, 0.5F
#define EAX_PRESET_CONCERTHALL EAX_ENVIRONMENT_CONCERTHALL,0.5F,3.961F,0.5F #define EAX_PRESET_CONCERTHALL EAX_ENVIRONMENT_CONCERTHALL, 0.5F, 3.961F, 0.5F
#define EAX_PRESET_CAVE EAX_ENVIRONMENT_CAVE,0.5F,2.886F,1.304F #define EAX_PRESET_CAVE EAX_ENVIRONMENT_CAVE, 0.5F, 2.886F, 1.304F
#define EAX_PRESET_ARENA EAX_ENVIRONMENT_ARENA,0.361F,7.284F,0.332F #define EAX_PRESET_ARENA EAX_ENVIRONMENT_ARENA, 0.361F, 7.284F, 0.332F
#define EAX_PRESET_HANGAR EAX_ENVIRONMENT_HANGAR,0.5F,10.0F,0.3F #define EAX_PRESET_HANGAR EAX_ENVIRONMENT_HANGAR, 0.5F, 10.0F, 0.3F
#define EAX_PRESET_CARPETEDHALLWAY EAX_ENVIRONMENT_CARPETEDHALLWAY,0.153F,0.259F,2.0F #define EAX_PRESET_CARPETEDHALLWAY \
#define EAX_PRESET_HALLWAY EAX_ENVIRONMENT_HALLWAY,0.361F,1.493F,0.0F EAX_ENVIRONMENT_CARPETEDHALLWAY, 0.153F, 0.259F, 2.0F
#define EAX_PRESET_STONECORRIDOR EAX_ENVIRONMENT_STONECORRIDOR,0.444F,2.697F,0.638F #define EAX_PRESET_HALLWAY EAX_ENVIRONMENT_HALLWAY, 0.361F, 1.493F, 0.0F
#define EAX_PRESET_ALLEY EAX_ENVIRONMENT_ALLEY,0.25F,1.752F,0.776F #define EAX_PRESET_STONECORRIDOR \
#define EAX_PRESET_FOREST EAX_ENVIRONMENT_FOREST,0.111F,3.145F,0.472F EAX_ENVIRONMENT_STONECORRIDOR, 0.444F, 2.697F, 0.638F
#define EAX_PRESET_CITY EAX_ENVIRONMENT_CITY,0.111F,2.767F,0.224F #define EAX_PRESET_ALLEY EAX_ENVIRONMENT_ALLEY, 0.25F, 1.752F, 0.776F
#define EAX_PRESET_MOUNTAINS EAX_ENVIRONMENT_MOUNTAINS,0.194F,7.841F,0.472F #define EAX_PRESET_FOREST EAX_ENVIRONMENT_FOREST, 0.111F, 3.145F, 0.472F
#define EAX_PRESET_QUARRY EAX_ENVIRONMENT_QUARRY,1.0F,1.499F,0.5F #define EAX_PRESET_CITY EAX_ENVIRONMENT_CITY, 0.111F, 2.767F, 0.224F
#define EAX_PRESET_PLAIN EAX_ENVIRONMENT_PLAIN,0.097F,2.767F,0.224F #define EAX_PRESET_MOUNTAINS EAX_ENVIRONMENT_MOUNTAINS, 0.194F, 7.841F, 0.472F
#define EAX_PRESET_PARKINGLOT EAX_ENVIRONMENT_PARKINGLOT,0.208F,1.652F,1.5F #define EAX_PRESET_QUARRY EAX_ENVIRONMENT_QUARRY, 1.0F, 1.499F, 0.5F
#define EAX_PRESET_SEWERPIPE EAX_ENVIRONMENT_SEWERPIPE,0.652F,2.886F,0.25F #define EAX_PRESET_PLAIN EAX_ENVIRONMENT_PLAIN, 0.097F, 2.767F, 0.224F
#define EAX_PRESET_UNDERWATER EAX_ENVIRONMENT_UNDERWATER,1.0F,1.499F,0.0F #define EAX_PRESET_PARKINGLOT EAX_ENVIRONMENT_PARKINGLOT, 0.208F, 1.652F, 1.5F
#define EAX_PRESET_DRUGGED EAX_ENVIRONMENT_DRUGGED,0.875F,8.392F,1.388F #define EAX_PRESET_SEWERPIPE EAX_ENVIRONMENT_SEWERPIPE, 0.652F, 2.886F, 0.25F
#define EAX_PRESET_DIZZY EAX_ENVIRONMENT_DIZZY,0.139F,17.234F,0.666F #define EAX_PRESET_UNDERWATER EAX_ENVIRONMENT_UNDERWATER, 1.0F, 1.499F, 0.0F
#define EAX_PRESET_PSYCHOTIC EAX_ENVIRONMENT_PSYCHOTIC,0.486F,7.563F,0.806F #define EAX_PRESET_DRUGGED EAX_ENVIRONMENT_DRUGGED, 0.875F, 8.392F, 1.388F
#define EAX_PRESET_DIZZY EAX_ENVIRONMENT_DIZZY, 0.139F, 17.234F, 0.666F
#define EAX_PRESET_PSYCHOTIC EAX_ENVIRONMENT_PSYCHOTIC, 0.486F, 7.563F, 0.806F
typedef DWORD (CALLBACK STREAMPROC)(HSTREAM handle, void *buffer, DWORD length, void *user); typedef DWORD(CALLBACK STREAMPROC)(HSTREAM handle, void *buffer, DWORD length,
/* User stream callback function. NOTE: A stream function should obviously be as quick void *user);
as possible, other streams (and MOD musics) can't be mixed until it's finished. /* User stream callback function. NOTE: A stream function should obviously be as
handle : The stream that needs writing quick as possible, other streams (and MOD musics) can't be mixed until it's
buffer : Buffer to write the samples in finished. handle : The stream that needs writing buffer : Buffer to write the
length : Number of bytes to write samples in length : Number of bytes to write user : The 'user' parameter value
user : The 'user' parameter value given when calling BASS_StreamCreate given when calling BASS_StreamCreate RETURN : Number of bytes written. Set the
RETURN : Number of bytes written. Set the BASS_STREAMPROC_END flag to end the stream. */ BASS_STREAMPROC_END flag to end the stream. */
#define BASS_STREAMPROC_END 0x80000000 // end of user stream flag #define BASS_STREAMPROC_END 0x80000000 // end of user stream flag
// special STREAMPROCs // special STREAMPROCs
#define STREAMPROC_DUMMY (STREAMPROC*)0 // "dummy" stream #define STREAMPROC_DUMMY (STREAMPROC *)0 // "dummy" stream
#define STREAMPROC_PUSH (STREAMPROC*)-1 // push stream #define STREAMPROC_PUSH (STREAMPROC *)-1 // push stream
#define STREAMPROC_DEVICE (STREAMPROC*)-2 // device mix stream #define STREAMPROC_DEVICE (STREAMPROC *)-2 // device mix stream
// BASS_StreamCreateFileUser file systems // BASS_StreamCreateFileUser file systems
#define STREAMFILE_NOBUFFER 0 #define STREAMFILE_NOBUFFER 0
@ -514,10 +536,10 @@ RETURN : Number of bytes written. Set the BASS_STREAMPROC_END flag to end the st
#define STREAMFILE_BUFFERPUSH 2 #define STREAMFILE_BUFFERPUSH 2
// User file stream callback functions // User file stream callback functions
typedef void (CALLBACK FILECLOSEPROC)(void *user); typedef void(CALLBACK FILECLOSEPROC)(void *user);
typedef QWORD (CALLBACK FILELENPROC)(void *user); typedef QWORD(CALLBACK FILELENPROC)(void *user);
typedef DWORD (CALLBACK FILEREADPROC)(void *buffer, DWORD length, void *user); typedef DWORD(CALLBACK FILEREADPROC)(void *buffer, DWORD length, void *user);
typedef BOOL (CALLBACK FILESEEKPROC)(QWORD offset, void *user); typedef BOOL(CALLBACK FILESEEKPROC)(QWORD offset, void *user);
typedef struct { typedef struct {
FILECLOSEPROC *close; FILECLOSEPROC *close;
@ -542,7 +564,8 @@ typedef struct {
#define BASS_FILEPOS_SIZE 8 #define BASS_FILEPOS_SIZE 8
#define BASS_FILEPOS_BUFFERING 9 #define BASS_FILEPOS_BUFFERING 9
typedef void (CALLBACK DOWNLOADPROC)(const void *buffer, DWORD length, void *user); typedef void(CALLBACK DOWNLOADPROC)(const void *buffer, DWORD length,
void *user);
/* Internet stream download callback function. /* Internet stream download callback function.
buffer : Buffer containing the downloaded data... NULL=end of download buffer : Buffer containing the downloaded data... NULL=end of download
length : Number of bytes in the buffer length : Number of bytes in the buffer
@ -564,7 +587,8 @@ user : The 'user' parameter value given when calling BASS_StreamCreateURL */
#define BASS_SYNC_MIXTIME 0x40000000 // flag: sync at mixtime, else at playtime #define BASS_SYNC_MIXTIME 0x40000000 // flag: sync at mixtime, else at playtime
#define BASS_SYNC_ONETIME 0x80000000 // flag: sync only once, else continuously #define BASS_SYNC_ONETIME 0x80000000 // flag: sync only once, else continuously
typedef void (CALLBACK SYNCPROC)(HSYNC handle, DWORD channel, DWORD data, void *user); typedef void(CALLBACK SYNCPROC)(HSYNC handle, DWORD channel, DWORD data,
void *user);
/* Sync callback function. NOTE: a sync callback function should be very /* Sync callback function. NOTE: a sync callback function should be very
quick as other syncs can't be processed until it has finished. If the sync quick as other syncs can't be processed until it has finished. If the sync
is a "mixtime" sync, then other streams and MOD musics can't be mixed until is a "mixtime" sync, then other streams and MOD musics can't be mixed until
@ -574,7 +598,8 @@ channel: Channel that the sync occured in
data : Additional data associated with the sync's occurance data : Additional data associated with the sync's occurance
user : The 'user' parameter given when calling BASS_ChannelSetSync */ user : The 'user' parameter given when calling BASS_ChannelSetSync */
typedef void (CALLBACK DSPPROC)(HDSP handle, DWORD channel, void *buffer, DWORD length, void *user); typedef void(CALLBACK DSPPROC)(HDSP handle, DWORD channel, void *buffer,
DWORD length, void *user);
/* DSP callback function. NOTE: A DSP function should obviously be as quick as /* DSP callback function. NOTE: A DSP function should obviously be as quick as
possible... other DSP functions, streams and MOD musics can not be processed possible... other DSP functions, streams and MOD musics can not be processed
until it's finished. until it's finished.
@ -584,7 +609,8 @@ buffer : Buffer to apply the DSP to
length : Number of bytes in the buffer length : Number of bytes in the buffer
user : The 'user' parameter given when calling BASS_ChannelSetDSP */ user : The 'user' parameter given when calling BASS_ChannelSetDSP */
typedef BOOL (CALLBACK RECORDPROC)(HRECORD handle, const void *buffer, DWORD length, void *user); typedef BOOL(CALLBACK RECORDPROC)(HRECORD handle, const void *buffer,
DWORD length, void *user);
/* Recording callback function. /* Recording callback function.
handle : The recording handle handle : The recording handle
buffer : Buffer containing the recorded sample data buffer : Buffer containing the recorded sample data
@ -637,7 +663,8 @@ RETURN : TRUE = continue recording, FALSE = stop */
#define BASS_DATA_FFT8192 0x80000005 // 8192 FFT #define BASS_DATA_FFT8192 0x80000005 // 8192 FFT
#define BASS_DATA_FFT16384 0x80000006 // 16384 FFT #define BASS_DATA_FFT16384 0x80000006 // 16384 FFT
#define BASS_DATA_FFT32768 0x80000007 // 32768 FFT #define BASS_DATA_FFT32768 0x80000007 // 32768 FFT
#define BASS_DATA_FFT_INDIVIDUAL 0x10 // FFT flag: FFT for each channel, else all combined #define BASS_DATA_FFT_INDIVIDUAL \
0x10 // FFT flag: FFT for each channel, else all combined
#define BASS_DATA_FFT_NOWINDOW 0x20 // FFT flag: no Hanning window #define BASS_DATA_FFT_NOWINDOW 0x20 // FFT flag: no Hanning window
#define BASS_DATA_FFT_REMOVEDC 0x40 // FFT flag: pre-remove DC bias #define BASS_DATA_FFT_REMOVEDC 0x40 // FFT flag: pre-remove DC bias
#define BASS_DATA_FFT_COMPLEX 0x80 // FFT flag: return complex data #define BASS_DATA_FFT_COMPLEX 0x80 // FFT flag: return complex data
@ -656,28 +683,35 @@ RETURN : TRUE = continue recording, FALSE = stop */
#define BASS_TAG_ICY 4 // ICY headers : series of null-terminated ANSI strings #define BASS_TAG_ICY 4 // ICY headers : series of null-terminated ANSI strings
#define BASS_TAG_META 5 // ICY metadata : ANSI string #define BASS_TAG_META 5 // ICY metadata : ANSI string
#define BASS_TAG_APE 6 // APE tags : series of null-terminated UTF-8 strings #define BASS_TAG_APE 6 // APE tags : series of null-terminated UTF-8 strings
#define BASS_TAG_MP4 7 // MP4/iTunes metadata : series of null-terminated UTF-8 strings #define BASS_TAG_MP4 \
7 // MP4/iTunes metadata : series of null-terminated UTF-8 strings
#define BASS_TAG_WMA 8 // WMA tags : series of null-terminated UTF-8 strings #define BASS_TAG_WMA 8 // WMA tags : series of null-terminated UTF-8 strings
#define BASS_TAG_VENDOR 9 // OGG encoder : UTF-8 string #define BASS_TAG_VENDOR 9 // OGG encoder : UTF-8 string
#define BASS_TAG_LYRICS3 10 // Lyric3v2 tag : ASCII string #define BASS_TAG_LYRICS3 10 // Lyric3v2 tag : ASCII string
#define BASS_TAG_CA_CODEC 11 // CoreAudio codec info : TAG_CA_CODEC structure #define BASS_TAG_CA_CODEC 11 // CoreAudio codec info : TAG_CA_CODEC structure
#define BASS_TAG_MF 13 // Media Foundation tags : series of null-terminated UTF-8 strings #define BASS_TAG_MF \
13 // Media Foundation tags : series of null-terminated UTF-8 strings
#define BASS_TAG_WAVEFORMAT 14 // WAVE format : WAVEFORMATEEX structure #define BASS_TAG_WAVEFORMAT 14 // WAVE format : WAVEFORMATEEX structure
#define BASS_TAG_AM_MIME 15 // Android Media MIME type : ASCII string #define BASS_TAG_AM_MIME 15 // Android Media MIME type : ASCII string
#define BASS_TAG_AM_NAME 16 // Android Media codec name : ASCII string #define BASS_TAG_AM_NAME 16 // Android Media codec name : ASCII string
#define BASS_TAG_RIFF_INFO 0x100 // RIFF "INFO" tags : series of null-terminated ANSI strings #define BASS_TAG_RIFF_INFO \
0x100 // RIFF "INFO" tags : series of null-terminated ANSI strings
#define BASS_TAG_RIFF_BEXT 0x101 // RIFF/BWF "bext" tags : TAG_BEXT structure #define BASS_TAG_RIFF_BEXT 0x101 // RIFF/BWF "bext" tags : TAG_BEXT structure
#define BASS_TAG_RIFF_CART 0x102 // RIFF/BWF "cart" tags : TAG_CART structure #define BASS_TAG_RIFF_CART 0x102 // RIFF/BWF "cart" tags : TAG_CART structure
#define BASS_TAG_RIFF_DISP 0x103 // RIFF "DISP" text tag : ANSI string #define BASS_TAG_RIFF_DISP 0x103 // RIFF "DISP" text tag : ANSI string
#define BASS_TAG_RIFF_CUE 0x104 // RIFF "cue " chunk : TAG_CUE structure #define BASS_TAG_RIFF_CUE 0x104 // RIFF "cue " chunk : TAG_CUE structure
#define BASS_TAG_RIFF_SMPL 0x105 // RIFF "smpl" chunk : TAG_SMPL structure #define BASS_TAG_RIFF_SMPL 0x105 // RIFF "smpl" chunk : TAG_SMPL structure
#define BASS_TAG_APE_BINARY 0x1000 // + index #, binary APE tag : TAG_APE_BINARY structure #define BASS_TAG_APE_BINARY \
0x1000 // + index #, binary APE tag : TAG_APE_BINARY structure
#define BASS_TAG_MUSIC_NAME 0x10000 // MOD music name : ANSI string #define BASS_TAG_MUSIC_NAME 0x10000 // MOD music name : ANSI string
#define BASS_TAG_MUSIC_MESSAGE 0x10001 // MOD message : ANSI string #define BASS_TAG_MUSIC_MESSAGE 0x10001 // MOD message : ANSI string
#define BASS_TAG_MUSIC_ORDERS 0x10002 // MOD order list : BYTE array of pattern numbers #define BASS_TAG_MUSIC_ORDERS \
0x10002 // MOD order list : BYTE array of pattern numbers
#define BASS_TAG_MUSIC_AUTH 0x10003 // MOD author : UTF-8 string #define BASS_TAG_MUSIC_AUTH 0x10003 // MOD author : UTF-8 string
#define BASS_TAG_MUSIC_INST 0x10100 // + instrument #, MOD instrument name : ANSI string #define BASS_TAG_MUSIC_INST \
#define BASS_TAG_MUSIC_SAMPLE 0x10300 // + sample #, MOD sample name : ANSI string 0x10100 // + instrument #, MOD instrument name : ANSI string
#define BASS_TAG_MUSIC_SAMPLE \
0x10300 // + sample #, MOD sample name : ANSI string
// ID3v1 tag structure // ID3v1 tag structure
typedef struct { typedef struct {
@ -700,9 +734,9 @@ typedef struct {
// BWF "bext" tag structure // BWF "bext" tag structure
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(push) #pragma warning(push)
#pragma warning(disable:4200) #pragma warning(disable : 4200)
#endif #endif
#pragma pack(push,1) #pragma pack(push, 1)
typedef struct { typedef struct {
char Description[256]; // description char Description[256]; // description
char Originator[32]; // name of the originator char Originator[32]; // name of the originator
@ -713,7 +747,7 @@ typedef struct {
WORD Version; // BWF version (little-endian) WORD Version; // BWF version (little-endian)
BYTE UMID[64]; // SMPTE UMID BYTE UMID[64]; // SMPTE UMID
BYTE Reserved[190]; BYTE Reserved[190];
#if defined(__GNUC__) && __GNUC__<3 #if defined(__GNUC__) && __GNUC__ < 3
char CodingHistory[0]; // history char CodingHistory[0]; // history
#elif 1 // change to 0 if compiler fails the following line #elif 1 // change to 0 if compiler fails the following line
char CodingHistory[]; // history char CodingHistory[]; // history
@ -724,14 +758,12 @@ typedef struct {
#pragma pack(pop) #pragma pack(pop)
// BWF "cart" tag structures // BWF "cart" tag structures
typedef struct typedef struct {
{
DWORD dwUsage; // FOURCC timer usage ID DWORD dwUsage; // FOURCC timer usage ID
DWORD dwValue; // timer value in samples from head DWORD dwValue; // timer value in samples from head
} TAG_CART_TIMER; } TAG_CART_TIMER;
typedef struct typedef struct {
{
char Version[4]; // version of the data structure char Version[4]; // version of the data structure
char Title[64]; // title of cart audio sequence char Title[64]; // title of cart audio sequence
char Artist[64]; // artist or creator name char Artist[64]; // artist or creator name
@ -751,7 +783,7 @@ typedef struct
TAG_CART_TIMER PostTimer[8]; // 8 time markers after head TAG_CART_TIMER PostTimer[8]; // 8 time markers after head
char Reserved[276]; char Reserved[276];
char URL[1024]; // uniform resource locator char URL[1024]; // uniform resource locator
#if defined(__GNUC__) && __GNUC__<3 #if defined(__GNUC__) && __GNUC__ < 3
char TagText[0]; // free form text for scripts or tags char TagText[0]; // free form text for scripts or tags
#elif 1 // change to 0 if compiler fails the following line #elif 1 // change to 0 if compiler fails the following line
char TagText[]; // free form text for scripts or tags char TagText[]; // free form text for scripts or tags
@ -761,8 +793,7 @@ typedef struct
} TAG_CART; } TAG_CART;
// RIFF "cue " tag structures // RIFF "cue " tag structures
typedef struct typedef struct {
{
DWORD dwName; DWORD dwName;
DWORD dwPosition; DWORD dwPosition;
DWORD fccChunk; DWORD fccChunk;
@ -771,10 +802,9 @@ typedef struct
DWORD dwSampleOffset; DWORD dwSampleOffset;
} TAG_CUE_POINT; } TAG_CUE_POINT;
typedef struct typedef struct {
{
DWORD dwCuePoints; DWORD dwCuePoints;
#if defined(__GNUC__) && __GNUC__<3 #if defined(__GNUC__) && __GNUC__ < 3
TAG_CUE_POINT CuePoints[0]; TAG_CUE_POINT CuePoints[0];
#elif 1 // change to 0 if compiler fails the following line #elif 1 // change to 0 if compiler fails the following line
TAG_CUE_POINT CuePoints[]; TAG_CUE_POINT CuePoints[];
@ -784,8 +814,7 @@ typedef struct
} TAG_CUE; } TAG_CUE;
// RIFF "smpl" tag structures // RIFF "smpl" tag structures
typedef struct typedef struct {
{
DWORD dwIdentifier; DWORD dwIdentifier;
DWORD dwType; DWORD dwType;
DWORD dwStart; DWORD dwStart;
@ -794,8 +823,7 @@ typedef struct
DWORD dwPlayCount; DWORD dwPlayCount;
} TAG_SMPL_LOOP; } TAG_SMPL_LOOP;
typedef struct typedef struct {
{
DWORD dwManufacturer; DWORD dwManufacturer;
DWORD dwProduct; DWORD dwProduct;
DWORD dwSamplePeriod; DWORD dwSamplePeriod;
@ -805,7 +833,7 @@ typedef struct
DWORD dwSMPTEOffset; DWORD dwSMPTEOffset;
DWORD cSampleLoops; DWORD cSampleLoops;
DWORD cbSamplerData; DWORD cbSamplerData;
#if defined(__GNUC__) && __GNUC__<3 #if defined(__GNUC__) && __GNUC__ < 3
TAG_SMPL_LOOP SampleLoops[0]; TAG_SMPL_LOOP SampleLoops[0];
#elif 1 // change to 0 if compiler fails the following line #elif 1 // change to 0 if compiler fails the following line
TAG_SMPL_LOOP SampleLoops[]; TAG_SMPL_LOOP SampleLoops[];
@ -826,9 +854,8 @@ typedef struct {
#ifndef _WAVEFORMATEX_ #ifndef _WAVEFORMATEX_
#define _WAVEFORMATEX_ #define _WAVEFORMATEX_
#pragma pack(push,1) #pragma pack(push, 1)
typedef struct tWAVEFORMATEX typedef struct tWAVEFORMATEX {
{
WORD wFormatTag; WORD wFormatTag;
WORD nChannels; WORD nChannels;
DWORD nSamplesPerSec; DWORD nSamplesPerSec;
@ -846,10 +873,13 @@ typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
#define BASS_POS_MUSIC_ORDER 1 // order.row position, MAKELONG(order,row) #define BASS_POS_MUSIC_ORDER 1 // order.row position, MAKELONG(order,row)
#define BASS_POS_OGG 3 // OGG bitstream number #define BASS_POS_OGG 3 // OGG bitstream number
#define BASS_POS_RESET 0x2000000 // flag: reset user file buffers #define BASS_POS_RESET 0x2000000 // flag: reset user file buffers
#define BASS_POS_RELATIVE 0x4000000 // flag: seek relative to the current position #define BASS_POS_RELATIVE \
0x4000000 // flag: seek relative to the current position
#define BASS_POS_INEXACT 0x8000000 // flag: allow seeking to inexact position #define BASS_POS_INEXACT 0x8000000 // flag: allow seeking to inexact position
#define BASS_POS_DECODE 0x10000000 // flag: get the decoding (not playing) position #define BASS_POS_DECODE \
#define BASS_POS_DECODETO 0x20000000 // flag: decode to the position instead of seeking 0x10000000 // flag: get the decoding (not playing) position
#define BASS_POS_DECODETO \
0x20000000 // flag: decode to the position instead of seeking
#define BASS_POS_SCAN 0x40000000 // flag: scan to the position #define BASS_POS_SCAN 0x40000000 // flag: scan to the position
// BASS_ChannelSetDevice/GetDevice option // BASS_ChannelSetDevice/GetDevice option
@ -975,7 +1005,7 @@ typedef struct {
DWORD lCurve; DWORD lCurve;
} BASS_FX_VOLUME_PARAM; } BASS_FX_VOLUME_PARAM;
typedef void (CALLBACK IOSNOTIFYPROC)(DWORD status); typedef void(CALLBACK IOSNOTIFYPROC)(DWORD status);
/* iOS notification callback function. /* iOS notification callback function.
status : The notification (BASS_IOSNOTIFY_xxx) */ status : The notification (BASS_IOSNOTIFY_xxx) */
@ -989,15 +1019,19 @@ void *BASSDEF(BASS_GetConfigPtr)(DWORD option);
DWORD BASSDEF(BASS_GetVersion)(); DWORD BASSDEF(BASS_GetVersion)();
int BASSDEF(BASS_ErrorGetCode)(); int BASSDEF(BASS_ErrorGetCode)();
BOOL BASSDEF(BASS_GetDeviceInfo)(DWORD device, BASS_DEVICEINFO *info); BOOL BASSDEF(BASS_GetDeviceInfo)(DWORD device, BASS_DEVICEINFO *info);
#if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP) #if defined(_WIN32) && !defined(_WIN32_WCE) && \
BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, HWND win, const GUID *dsguid); !(WINAPI_FAMILY && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, HWND win,
const GUID *dsguid);
#else #else
BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, void *win, void *dsguid); BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, void *win,
void *dsguid);
#endif #endif
BOOL BASSDEF(BASS_SetDevice)(DWORD device); BOOL BASSDEF(BASS_SetDevice)(DWORD device);
DWORD BASSDEF(BASS_GetDevice)(); DWORD BASSDEF(BASS_GetDevice)();
BOOL BASSDEF(BASS_Free)(); BOOL BASSDEF(BASS_Free)();
#if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP) #if defined(_WIN32) && !defined(_WIN32_WCE) && \
!(WINAPI_FAMILY && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
void *BASSDEF(BASS_GetDSoundObject)(DWORD object); void *BASSDEF(BASS_GetDSoundObject)(DWORD object);
#endif #endif
BOOL BASSDEF(BASS_GetInfo)(BASS_INFO *info); BOOL BASSDEF(BASS_GetInfo)(BASS_INFO *info);
@ -1015,19 +1049,29 @@ const BASS_PLUGININFO *BASSDEF(BASS_PluginGetInfo)(HPLUGIN handle);
BOOL BASSDEF(BASS_Set3DFactors)(float distf, float rollf, float doppf); BOOL BASSDEF(BASS_Set3DFactors)(float distf, float rollf, float doppf);
BOOL BASSDEF(BASS_Get3DFactors)(float *distf, float *rollf, float *doppf); BOOL BASSDEF(BASS_Get3DFactors)(float *distf, float *rollf, float *doppf);
BOOL BASSDEF(BASS_Set3DPosition)(const BASS_3DVECTOR *pos, const BASS_3DVECTOR *vel, const BASS_3DVECTOR *front, const BASS_3DVECTOR *top); BOOL BASSDEF(BASS_Set3DPosition)(const BASS_3DVECTOR *pos,
BOOL BASSDEF(BASS_Get3DPosition)(BASS_3DVECTOR *pos, BASS_3DVECTOR *vel, BASS_3DVECTOR *front, BASS_3DVECTOR *top); const BASS_3DVECTOR *vel,
const BASS_3DVECTOR *front,
const BASS_3DVECTOR *top);
BOOL BASSDEF(BASS_Get3DPosition)(BASS_3DVECTOR *pos, BASS_3DVECTOR *vel,
BASS_3DVECTOR *front, BASS_3DVECTOR *top);
void BASSDEF(BASS_Apply3D)(); void BASSDEF(BASS_Apply3D)();
#if defined(_WIN32) && !defined(_WIN32_WCE) && !(WINAPI_FAMILY && WINAPI_FAMILY!=WINAPI_FAMILY_DESKTOP_APP) #if defined(_WIN32) && !defined(_WIN32_WCE) && \
BOOL BASSDEF(BASS_SetEAXParameters)(int env, float vol, float decay, float damp); !(WINAPI_FAMILY && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP)
BOOL BASSDEF(BASS_GetEAXParameters)(DWORD *env, float *vol, float *decay, float *damp); BOOL BASSDEF(BASS_SetEAXParameters)(int env, float vol, float decay,
float damp);
BOOL BASSDEF(BASS_GetEAXParameters)(DWORD *env, float *vol, float *decay,
float *damp);
#endif #endif
HMUSIC BASSDEF(BASS_MusicLoad)(BOOL mem, const void *file, QWORD offset, DWORD length, DWORD flags, DWORD freq); HMUSIC BASSDEF(BASS_MusicLoad)(BOOL mem, const void *file, QWORD offset,
DWORD length, DWORD flags, DWORD freq);
BOOL BASSDEF(BASS_MusicFree)(HMUSIC handle); BOOL BASSDEF(BASS_MusicFree)(HMUSIC handle);
HSAMPLE BASSDEF(BASS_SampleLoad)(BOOL mem, const void *file, QWORD offset, DWORD length, DWORD max, DWORD flags); HSAMPLE BASSDEF(BASS_SampleLoad)(BOOL mem, const void *file, QWORD offset,
HSAMPLE BASSDEF(BASS_SampleCreate)(DWORD length, DWORD freq, DWORD chans, DWORD max, DWORD flags); DWORD length, DWORD max, DWORD flags);
HSAMPLE BASSDEF(BASS_SampleCreate)(DWORD length, DWORD freq, DWORD chans,
DWORD max, DWORD flags);
BOOL BASSDEF(BASS_SampleFree)(HSAMPLE handle); BOOL BASSDEF(BASS_SampleFree)(HSAMPLE handle);
BOOL BASSDEF(BASS_SampleSetData)(HSAMPLE handle, const void *buffer); BOOL BASSDEF(BASS_SampleSetData)(HSAMPLE handle, const void *buffer);
BOOL BASSDEF(BASS_SampleGetData)(HSAMPLE handle, void *buffer); BOOL BASSDEF(BASS_SampleGetData)(HSAMPLE handle, void *buffer);
@ -1037,14 +1081,22 @@ HCHANNEL BASSDEF(BASS_SampleGetChannel)(HSAMPLE handle, BOOL onlynew);
DWORD BASSDEF(BASS_SampleGetChannels)(HSAMPLE handle, HCHANNEL *channels); DWORD BASSDEF(BASS_SampleGetChannels)(HSAMPLE handle, HCHANNEL *channels);
BOOL BASSDEF(BASS_SampleStop)(HSAMPLE handle); BOOL BASSDEF(BASS_SampleStop)(HSAMPLE handle);
HSTREAM BASSDEF(BASS_StreamCreate)(DWORD freq, DWORD chans, DWORD flags, STREAMPROC *proc, void *user); HSTREAM BASSDEF(BASS_StreamCreate)(DWORD freq, DWORD chans, DWORD flags,
HSTREAM BASSDEF(BASS_StreamCreateFile)(BOOL mem, const void *file, QWORD offset, QWORD length, DWORD flags); STREAMPROC *proc, void *user);
HSTREAM BASSDEF(BASS_StreamCreateURL)(const char *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, void *user); HSTREAM BASSDEF(BASS_StreamCreateFile)(BOOL mem, const void *file, QWORD offset,
HSTREAM BASSDEF(BASS_StreamCreateFileUser)(DWORD system, DWORD flags, const BASS_FILEPROCS *proc, void *user); QWORD length, DWORD flags);
HSTREAM BASSDEF(BASS_StreamCreateURL)(const char *url, DWORD offset,
DWORD flags, DOWNLOADPROC *proc,
void *user);
HSTREAM BASSDEF(BASS_StreamCreateFileUser)(DWORD system, DWORD flags,
const BASS_FILEPROCS *proc,
void *user);
BOOL BASSDEF(BASS_StreamFree)(HSTREAM handle); BOOL BASSDEF(BASS_StreamFree)(HSTREAM handle);
QWORD BASSDEF(BASS_StreamGetFilePosition)(HSTREAM handle, DWORD mode); QWORD BASSDEF(BASS_StreamGetFilePosition)(HSTREAM handle, DWORD mode);
DWORD BASSDEF(BASS_StreamPutData)(HSTREAM handle, const void *buffer, DWORD length); DWORD BASSDEF(BASS_StreamPutData)(HSTREAM handle, const void *buffer,
DWORD BASSDEF(BASS_StreamPutFileData)(HSTREAM handle, const void *buffer, DWORD length); DWORD length);
DWORD BASSDEF(BASS_StreamPutFileData)(HSTREAM handle, const void *buffer,
DWORD length);
BOOL BASSDEF(BASS_RecordGetDeviceInfo)(DWORD device, BASS_DEVICEINFO *info); BOOL BASSDEF(BASS_RecordGetDeviceInfo)(DWORD device, BASS_DEVICEINFO *info);
BOOL BASSDEF(BASS_RecordInit)(int device); BOOL BASSDEF(BASS_RecordInit)(int device);
@ -1055,7 +1107,8 @@ BOOL BASSDEF(BASS_RecordGetInfo)(BASS_RECORDINFO *info);
const char *BASSDEF(BASS_RecordGetInputName)(int input); const char *BASSDEF(BASS_RecordGetInputName)(int input);
BOOL BASSDEF(BASS_RecordSetInput)(int input, DWORD flags, float volume); BOOL BASSDEF(BASS_RecordSetInput)(int input, DWORD flags, float volume);
DWORD BASSDEF(BASS_RecordGetInput)(int input, float *volume); DWORD BASSDEF(BASS_RecordGetInput)(int input, float *volume);
HRECORD BASSDEF(BASS_RecordStart)(DWORD freq, DWORD chans, DWORD flags, RECORDPROC *proc, void *user); HRECORD BASSDEF(BASS_RecordStart)(DWORD freq, DWORD chans, DWORD flags,
RECORDPROC *proc, void *user);
double BASSDEF(BASS_ChannelBytes2Seconds)(DWORD handle, QWORD pos); double BASSDEF(BASS_ChannelBytes2Seconds)(DWORD handle, QWORD pos);
QWORD BASSDEF(BASS_ChannelSeconds2Bytes)(DWORD handle, double pos); QWORD BASSDEF(BASS_ChannelSeconds2Bytes)(DWORD handle, double pos);
@ -1071,24 +1124,39 @@ BOOL BASSDEF(BASS_ChannelPlay)(DWORD handle, BOOL restart);
BOOL BASSDEF(BASS_ChannelStop)(DWORD handle); BOOL BASSDEF(BASS_ChannelStop)(DWORD handle);
BOOL BASSDEF(BASS_ChannelPause)(DWORD handle); BOOL BASSDEF(BASS_ChannelPause)(DWORD handle);
BOOL BASSDEF(BASS_ChannelSetAttribute)(DWORD handle, DWORD attrib, float value); BOOL BASSDEF(BASS_ChannelSetAttribute)(DWORD handle, DWORD attrib, float value);
BOOL BASSDEF(BASS_ChannelGetAttribute)(DWORD handle, DWORD attrib, float *value); BOOL BASSDEF(BASS_ChannelGetAttribute)(DWORD handle, DWORD attrib,
BOOL BASSDEF(BASS_ChannelSlideAttribute)(DWORD handle, DWORD attrib, float value, DWORD time); float *value);
BOOL BASSDEF(BASS_ChannelSlideAttribute)(DWORD handle, DWORD attrib,
float value, DWORD time);
BOOL BASSDEF(BASS_ChannelIsSliding)(DWORD handle, DWORD attrib); BOOL BASSDEF(BASS_ChannelIsSliding)(DWORD handle, DWORD attrib);
BOOL BASSDEF(BASS_ChannelSetAttributeEx)(DWORD handle, DWORD attrib, void *value, DWORD size); BOOL BASSDEF(BASS_ChannelSetAttributeEx)(DWORD handle, DWORD attrib,
DWORD BASSDEF(BASS_ChannelGetAttributeEx)(DWORD handle, DWORD attrib, void *value, DWORD size); void *value, DWORD size);
BOOL BASSDEF(BASS_ChannelSet3DAttributes)(DWORD handle, int mode, float min, float max, int iangle, int oangle, float outvol); DWORD BASSDEF(BASS_ChannelGetAttributeEx)(DWORD handle, DWORD attrib,
BOOL BASSDEF(BASS_ChannelGet3DAttributes)(DWORD handle, DWORD *mode, float *min, float *max, DWORD *iangle, DWORD *oangle, float *outvol); void *value, DWORD size);
BOOL BASSDEF(BASS_ChannelSet3DPosition)(DWORD handle, const BASS_3DVECTOR *pos, const BASS_3DVECTOR *orient, const BASS_3DVECTOR *vel); BOOL BASSDEF(BASS_ChannelSet3DAttributes)(DWORD handle, int mode, float min,
BOOL BASSDEF(BASS_ChannelGet3DPosition)(DWORD handle, BASS_3DVECTOR *pos, BASS_3DVECTOR *orient, BASS_3DVECTOR *vel); float max, int iangle, int oangle,
float outvol);
BOOL BASSDEF(BASS_ChannelGet3DAttributes)(DWORD handle, DWORD *mode, float *min,
float *max, DWORD *iangle,
DWORD *oangle, float *outvol);
BOOL BASSDEF(BASS_ChannelSet3DPosition)(DWORD handle, const BASS_3DVECTOR *pos,
const BASS_3DVECTOR *orient,
const BASS_3DVECTOR *vel);
BOOL BASSDEF(BASS_ChannelGet3DPosition)(DWORD handle, BASS_3DVECTOR *pos,
BASS_3DVECTOR *orient,
BASS_3DVECTOR *vel);
QWORD BASSDEF(BASS_ChannelGetLength)(DWORD handle, DWORD mode); QWORD BASSDEF(BASS_ChannelGetLength)(DWORD handle, DWORD mode);
BOOL BASSDEF(BASS_ChannelSetPosition)(DWORD handle, QWORD pos, DWORD mode); BOOL BASSDEF(BASS_ChannelSetPosition)(DWORD handle, QWORD pos, DWORD mode);
QWORD BASSDEF(BASS_ChannelGetPosition)(DWORD handle, DWORD mode); QWORD BASSDEF(BASS_ChannelGetPosition)(DWORD handle, DWORD mode);
DWORD BASSDEF(BASS_ChannelGetLevel)(DWORD handle); DWORD BASSDEF(BASS_ChannelGetLevel)(DWORD handle);
BOOL BASSDEF(BASS_ChannelGetLevelEx)(DWORD handle, float *levels, float length, DWORD flags); BOOL BASSDEF(BASS_ChannelGetLevelEx)(DWORD handle, float *levels, float length,
DWORD flags);
DWORD BASSDEF(BASS_ChannelGetData)(DWORD handle, void *buffer, DWORD length); DWORD BASSDEF(BASS_ChannelGetData)(DWORD handle, void *buffer, DWORD length);
HSYNC BASSDEF(BASS_ChannelSetSync)(DWORD handle, DWORD type, QWORD param, SYNCPROC *proc, void *user); HSYNC BASSDEF(BASS_ChannelSetSync)(DWORD handle, DWORD type, QWORD param,
SYNCPROC *proc, void *user);
BOOL BASSDEF(BASS_ChannelRemoveSync)(DWORD handle, HSYNC sync); BOOL BASSDEF(BASS_ChannelRemoveSync)(DWORD handle, HSYNC sync);
HDSP BASSDEF(BASS_ChannelSetDSP)(DWORD handle, DSPPROC *proc, void *user, int priority); HDSP BASSDEF(BASS_ChannelSetDSP)(DWORD handle, DSPPROC *proc, void *user,
int priority);
BOOL BASSDEF(BASS_ChannelRemoveDSP)(DWORD handle, HDSP dsp); BOOL BASSDEF(BASS_ChannelRemoveDSP)(DWORD handle, HDSP dsp);
BOOL BASSDEF(BASS_ChannelSetLink)(DWORD handle, DWORD chan); BOOL BASSDEF(BASS_ChannelSetLink)(DWORD handle, DWORD chan);
BOOL BASSDEF(BASS_ChannelRemoveLink)(DWORD handle, DWORD chan); BOOL BASSDEF(BASS_ChannelRemoveLink)(DWORD handle, DWORD chan);
@ -1106,32 +1174,42 @@ BOOL BASSDEF(BASS_FXSetPriority)(HFX handle, int priority);
#if defined(_WIN32) && !defined(NOBASSOVERLOADS) #if defined(_WIN32) && !defined(NOBASSOVERLOADS)
static inline HPLUGIN BASS_PluginLoad(const WCHAR *file, DWORD flags) static inline HPLUGIN BASS_PluginLoad(const WCHAR *file, DWORD flags)
{ {
return BASS_PluginLoad((const char*)file, flags|BASS_UNICODE); return BASS_PluginLoad((const char *)file, flags | BASS_UNICODE);
} }
static inline HMUSIC BASS_MusicLoad(BOOL mem, const WCHAR *file, QWORD offset, DWORD length, DWORD flags, DWORD freq) static inline HMUSIC BASS_MusicLoad(BOOL mem, const WCHAR *file, QWORD offset,
DWORD length, DWORD flags, DWORD freq)
{ {
return BASS_MusicLoad(mem, (const void*)file, offset, length, flags|BASS_UNICODE, freq); return BASS_MusicLoad(mem, (const void *)file, offset, length,
flags | BASS_UNICODE, freq);
} }
static inline HSAMPLE BASS_SampleLoad(BOOL mem, const WCHAR *file, QWORD offset, DWORD length, DWORD max, DWORD flags) static inline HSAMPLE BASS_SampleLoad(BOOL mem, const WCHAR *file, QWORD offset,
DWORD length, DWORD max, DWORD flags)
{ {
return BASS_SampleLoad(mem, (const void*)file, offset, length, max, flags|BASS_UNICODE); return BASS_SampleLoad(mem, (const void *)file, offset, length, max,
flags | BASS_UNICODE);
} }
static inline HSTREAM BASS_StreamCreateFile(BOOL mem, const WCHAR *file, QWORD offset, QWORD length, DWORD flags) static inline HSTREAM BASS_StreamCreateFile(BOOL mem, const WCHAR *file,
QWORD offset, QWORD length,
DWORD flags)
{ {
return BASS_StreamCreateFile(mem, (const void*)file, offset, length, flags|BASS_UNICODE); return BASS_StreamCreateFile(mem, (const void *)file, offset, length,
flags | BASS_UNICODE);
} }
static inline HSTREAM BASS_StreamCreateURL(const WCHAR *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, void *user) static inline HSTREAM BASS_StreamCreateURL(const WCHAR *url, DWORD offset,
DWORD flags, DOWNLOADPROC *proc,
void *user)
{ {
return BASS_StreamCreateURL((const char*)url, offset, flags|BASS_UNICODE, proc, user); return BASS_StreamCreateURL((const char *)url, offset, flags | BASS_UNICODE,
proc, user);
} }
static inline BOOL BASS_SetConfigPtr(DWORD option, const WCHAR *value) static inline BOOL BASS_SetConfigPtr(DWORD option, const WCHAR *value)
{ {
return BASS_SetConfigPtr(option|BASS_UNICODE, (const void*)value); return BASS_SetConfigPtr(option | BASS_UNICODE, (const void *)value);
} }
#endif #endif
#endif #endif

View File

@ -1,15 +1,16 @@
#ifndef CHATLOGPIECE_H #ifndef CHATLOGPIECE_H
#define CHATLOGPIECE_H #define CHATLOGPIECE_H
#include <QString>
#include <QDateTime> #include <QDateTime>
#include <QString>
class chatlogpiece class chatlogpiece {
{
public: public:
chatlogpiece(); chatlogpiece();
chatlogpiece(QString p_name, QString p_showname, QString p_message, bool p_song); chatlogpiece(QString p_name, QString p_showname, QString p_message,
chatlogpiece(QString p_name, QString p_showname, QString p_message, bool p_song, QDateTime p_datetime); bool p_song);
chatlogpiece(QString p_name, QString p_showname, QString p_message,
bool p_song, QDateTime p_datetime);
QString get_name(); QString get_name();
QString get_showname(); QString get_showname();

View File

@ -1,73 +1,70 @@
#ifndef COURTROOM_H #ifndef COURTROOM_H
#define COURTROOM_H #define COURTROOM_H
#include "aoimage.h" #include "aoapplication.h"
#include "aoblipplayer.h"
#include "aobutton.h" #include "aobutton.h"
#include "aocharbutton.h" #include "aocharbutton.h"
#include "aocharmovie.h"
#include "aoemotebutton.h" #include "aoemotebutton.h"
#include "aoevidencebutton.h"
#include "aoevidencedisplay.h"
#include "aoimage.h"
#include "aolineedit.h"
#include "aomovie.h"
#include "aomusicplayer.h"
#include "aopacket.h" #include "aopacket.h"
#include "aoscene.h" #include "aoscene.h"
#include "aomovie.h"
#include "aocharmovie.h"
#include "aomusicplayer.h"
#include "aosfxplayer.h" #include "aosfxplayer.h"
#include "aoblipplayer.h"
#include "aoevidencebutton.h"
#include "aotextarea.h" #include "aotextarea.h"
#include "aolineedit.h"
#include "aotextedit.h" #include "aotextedit.h"
#include "aoevidencedisplay.h" #include "chatlogpiece.h"
#include "datatypes.h"
#include "aoapplication.h"
#include "lobby.h"
#include "hardware_functions.h"
#include "file_functions.h"
#include "datatypes.h" #include "datatypes.h"
#include "debug_functions.h" #include "debug_functions.h"
#include "chatlogpiece.h" #include "file_functions.h"
#include "hardware_functions.h"
#include "lobby.h"
#include <QMainWindow>
#include <QLineEdit>
#include <QPlainTextEdit>
#include <QListWidget>
#include <QCheckBox> #include <QCheckBox>
#include <QComboBox>
#include <QSlider>
#include <QVector>
#include <QCloseEvent> #include <QCloseEvent>
#include <QComboBox>
#include <QLineEdit>
#include <QListWidget>
#include <QMainWindow>
#include <QMap> #include <QMap>
#include <QTextBrowser> #include <QPlainTextEdit>
#include <QSlider>
#include <QSpinBox> #include <QSpinBox>
#include <QTextBrowser>
#include <QVector>
#include <QDebug>
#include <QScrollBar>
#include <QRegExp>
#include <QBrush> #include <QBrush>
#include <QTextCharFormat> #include <QDebug>
#include <QFileDialog>
#include <QFont> #include <QFont>
#include <QInputDialog> #include <QInputDialog>
#include <QFileDialog> #include <QRegExp>
#include <QScrollBar>
#include <QTextBoundaryFinder> #include <QTextBoundaryFinder>
#include <QTextCharFormat>
#include <stack> #include <stack>
class AOApplication; class AOApplication;
class Courtroom : public QMainWindow class Courtroom : public QMainWindow {
{
Q_OBJECT Q_OBJECT
public: public:
explicit Courtroom(AOApplication *p_ao_app); explicit Courtroom(AOApplication *p_ao_app);
void append_char(char_type p_char){char_list.append(p_char);} void append_char(char_type p_char) { char_list.append(p_char); }
void append_evidence(evi_type p_evi){evidence_list.append(p_evi);} void append_evidence(evi_type p_evi) { evidence_list.append(p_evi); }
void append_music(QString f_music){music_list.append(f_music);} void append_music(QString f_music) { music_list.append(f_music); }
void append_area(QString f_area){area_list.append(f_area);} void append_area(QString f_area) { area_list.append(f_area); }
void fix_last_area() void fix_last_area()
{ {
if (area_list.size() > 0) if (area_list.size() > 0) {
{
QString malplaced = area_list.last(); QString malplaced = area_list.last();
area_list.removeLast(); area_list.removeLast();
append_music(malplaced); append_music(malplaced);
@ -84,23 +81,19 @@ public:
void arup_modify(int type, int place, QString value) void arup_modify(int type, int place, QString value)
{ {
if (type == 0) if (type == 0) {
{
if (arup_players.size() > place) if (arup_players.size() > place)
arup_players[place] = value.toInt(); arup_players[place] = value.toInt();
} }
else if (type == 1) else if (type == 1) {
{
if (arup_statuses.size() > place) if (arup_statuses.size() > place)
arup_statuses[place] = value; arup_statuses[place] = value;
} }
else if (type == 2) else if (type == 2) {
{
if (arup_cms.size() > place) if (arup_cms.size() > place)
arup_cms[place] = value; arup_cms[place] = value;
} }
else if (type == 3) else if (type == 3) {
{
if (arup_locks.size() > place) if (arup_locks.size() > place)
arup_locks[place] = value; arup_locks[place] = value;
} }
@ -109,105 +102,114 @@ public:
void character_loading_finished(); void character_loading_finished();
//sets position of widgets based on theme ini files // sets position of widgets based on theme ini files
void set_widgets(); void set_widgets();
//sets font size based on theme ini files // sets font size based on theme ini files
void set_font(QWidget *widget, QString p_identifier); void set_font(QWidget *widget, QString p_identifier);
//helper function that calls above function on the relevant widgets // helper function that calls above function on the relevant widgets
void set_fonts(); void set_fonts();
void set_window_title(QString p_title); void set_window_title(QString p_title);
//reads theme inis and sets size and pos based on the identifier // reads theme inis and sets size and pos based on the identifier
void set_size_and_pos(QWidget *p_widget, QString p_identifier); void set_size_and_pos(QWidget *p_widget, QString p_identifier);
//sets status as taken on character with cid n_char and places proper shading on charselect // sets status as taken on character with cid n_char and places proper shading
// on charselect
void set_taken(int n_char, bool p_taken); void set_taken(int n_char, bool p_taken);
//sets the current background to argument. also does some checks to see if it's a legacy bg // sets the current background to argument. also does some checks to see if
// it's a legacy bg
void set_background(QString p_background); void set_background(QString p_background);
//sets the evidence list member variable to argument // sets the evidence list member variable to argument
void set_evidence_list(QVector<evi_type> &p_evi_list); void set_evidence_list(QVector<evi_type> &p_evi_list);
//called when a DONE#% from the server was received // called when a DONE#% from the server was received
void done_received(); void done_received();
//sets the local mute list based on characters available on the server // sets the local mute list based on characters available on the server
void set_mute_list(); void set_mute_list();
// Sets the local pair list based on the characters available on the server. // Sets the local pair list based on the characters available on the server.
void set_pair_list(); void set_pair_list();
//sets desk and bg based on pos in chatmessage // sets desk and bg based on pos in chatmessage
void set_scene(); void set_scene();
//sets text color based on text color in chatmessage // sets text color based on text color in chatmessage
void set_text_color(); void set_text_color();
// And gets the colour, too! // And gets the colour, too!
QColor get_text_color(QString color); QColor get_text_color(QString color);
//takes in serverD-formatted IP list as prints a converted version to server OOC // takes in serverD-formatted IP list as prints a converted version to server
//admittedly poorly named // OOC admittedly poorly named
void set_ip_list(QString p_list); void set_ip_list(QString p_list);
//disables chat if current cid matches second argument // disables chat if current cid matches second argument
//enables if p_muted is false // enables if p_muted is false
void set_mute(bool p_muted, int p_cid); void set_mute(bool p_muted, int p_cid);
//send a message that the player is banned and quits the server // send a message that the player is banned and quits the server
void set_ban(int p_cid); void set_ban(int p_cid);
//cid = character id, returns the cid of the currently selected character // cid = character id, returns the cid of the currently selected character
int get_cid() {return m_cid;} int get_cid() { return m_cid; }
QString get_current_char() {return current_char;} QString get_current_char() { return current_char; }
QString get_current_background() {return current_background;} QString get_current_background() { return current_background; }
//properly sets up some varibles: resets user state // properly sets up some varibles: resets user state
void enter_courtroom(int p_cid); void enter_courtroom(int p_cid);
//helper function that populates ui_music_list with the contents of music_list // helper function that populates ui_music_list with the contents of
// music_list
void list_music(); void list_music();
void list_areas(); void list_areas();
//these are for OOC chat // these are for OOC chat
void append_ms_chatmessage(QString f_name, QString f_message); 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_colour);
//these functions handle chatmessages sequentially. // these functions handle chatmessages sequentially.
//The process itself is very convoluted and merits separate documentation // The process itself is very convoluted and merits separate documentation
//But the general idea is objection animation->pre animation->talking->idle // But the general idea is objection animation->pre animation->talking->idle
void handle_chatmessage(QStringList *p_contents); void handle_chatmessage(QStringList *p_contents);
void handle_chatmessage_2(); void handle_chatmessage_2();
void handle_chatmessage_3(); void handle_chatmessage_3();
//This function filters out the common CC inline text trickery, for appending to // This function filters out the common CC inline text trickery, for appending
//the IC chatlog. // to the IC chatlog.
QString filter_ic_text(QString p_text); QString filter_ic_text(QString p_text);
//adds text to the IC chatlog. p_name first as bold then p_text then a newlin // 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 // this function keeps the chatlog scrolled to the top unless there's text
// selected
// or the user isn't already scrolled to the top // or the user isn't already scrolled to the top
void append_ic_text(QString p_text, QString p_name = "", bool is_songchange = false); void append_ic_text(QString p_text, QString p_name = "",
bool is_songchange = false);
//prints who played the song to IC chat and plays said song(if found on local filesystem) // prints who played the song to IC chat and plays said song(if found on local
//takes in a list where the first element is the song name and the second is the char id of who played it // filesystem) takes in a list where the first element is the song name and the
// second is the char id of who played it
void handle_song(QStringList *p_contents); void handle_song(QStringList *p_contents);
void play_preanim(bool noninterrupting); void play_preanim(bool noninterrupting);
//plays the witness testimony or cross examination animation based on argument // plays the witness testimony or cross examination animation based on
// argument
void handle_wtce(QString p_wtce, int variant); void handle_wtce(QString p_wtce, int variant);
//sets the hp bar of defense(p_bar 1) or pro(p_bar 2) // sets the hp bar of defense(p_bar 1) or pro(p_bar 2)
//state is an number between 0 and 10 inclusive // state is an number between 0 and 10 inclusive
void set_hp_bar(int p_bar, int p_state); void set_hp_bar(int p_bar, int p_state);
//Toggles the judge buttons, whether they should appear or not. // Toggles the judge buttons, whether they should appear or not.
void toggle_judge_buttons(bool is_on); void toggle_judge_buttons(bool is_on);
void announce_case(QString title, bool def, bool pro, bool jud, bool jur, bool steno); void announce_case(QString title, bool def, bool pro, bool jud, bool jur,
bool steno);
void check_connection_received(); void check_connection_received();
@ -230,12 +232,7 @@ private:
// This is for inline message-colouring. // This is for inline message-colouring.
enum INLINE_COLOURS { enum INLINE_COLOURS { INLINE_BLUE, INLINE_GREEN, INLINE_ORANGE, INLINE_GREY };
INLINE_BLUE,
INLINE_GREEN,
INLINE_ORANGE,
INLINE_GREY
};
// A stack of inline colours. // A stack of inline colours.
std::stack<INLINE_COLOURS> inline_colour_stack; std::stack<INLINE_COLOURS> inline_colour_stack;
@ -278,15 +275,15 @@ private:
QVector<int> music_row_to_number; QVector<int> music_row_to_number;
QVector<int> area_row_to_number; QVector<int> area_row_to_number;
//triggers ping_server() every 60 seconds // triggers ping_server() every 60 seconds
QTimer *keepalive_timer; QTimer *keepalive_timer;
//determines how fast messages tick onto screen // determines how fast messages tick onto screen
QTimer *chat_tick_timer; QTimer *chat_tick_timer;
//int chat_tick_interval = 60; // int chat_tick_interval = 60;
//which tick position(character in chat message) we are at // which tick position(character in chat message) we are at
int tick_pos = 0; int tick_pos = 0;
//used to determine how often blips sound // used to determine how often blips sound
int blip_pos = 0; int blip_pos = 0;
int blip_rate = 1; int blip_rate = 1;
int rainbow_counter = 0; int rainbow_counter = 0;
@ -299,21 +296,23 @@ private:
// True, if the log should go downwards. // True, if the log should go downwards.
bool log_goes_downwards = false; bool log_goes_downwards = false;
//delay before chat messages starts ticking // delay before chat messages starts ticking
QTimer *text_delay_timer; QTimer *text_delay_timer;
//delay before sfx plays // delay before sfx plays
QTimer *sfx_delay_timer; QTimer *sfx_delay_timer;
//keeps track of how long realization is visible(it's just a white square and should be visible less than a second) // keeps track of how long realization is visible(it's just a white square and
// should be visible less than a second)
QTimer *realization_timer; QTimer *realization_timer;
//times how long the blinking testimony should be shown(green one in the corner) // times how long the blinking testimony should be shown(green one in the
// corner)
QTimer *testimony_show_timer; QTimer *testimony_show_timer;
//times how long the blinking testimony should be hidden // times how long the blinking testimony should be hidden
QTimer *testimony_hide_timer; QTimer *testimony_hide_timer;
//every time point in char.inis times this equals the final time // every time point in char.inis times this equals the final time
const int time_mod = 40; const int time_mod = 40;
static const int chatmessage_size = 23; static const int chatmessage_size = 23;
@ -324,28 +323,30 @@ private:
bool testimony_in_progress = false; bool testimony_in_progress = false;
//in milliseconds // in milliseconds
const int testimony_show_time = 1500; const int testimony_show_time = 1500;
//in milliseconds // in milliseconds
const int testimony_hide_time = 500; const int testimony_hide_time = 500;
//char id, muted or not // char id, muted or not
QMap<int, bool> mute_map; QMap<int, bool> mute_map;
//QVector<int> muted_cids; // QVector<int> muted_cids;
bool is_muted = false; bool is_muted = false;
//state of animation, 0 = objecting, 1 = preanim, 2 = talking, 3 = idle, 4 = noniterrupting preanim // state of animation, 0 = objecting, 1 = preanim, 2 = talking, 3 = idle, 4 =
// noniterrupting preanim
int anim_state = 3; int anim_state = 3;
//state of text ticking, 0 = not yet ticking, 1 = ticking in progress, 2 = ticking done // state of text ticking, 0 = not yet ticking, 1 = ticking in progress, 2 =
// ticking done
int text_state = 2; int text_state = 2;
//character id, which index of the char_list the player is // character id, which index of the char_list the player is
int m_cid = -1; int m_cid = -1;
//cid and this may differ in cases of ini-editing // cid and this may differ in cases of ini-editing
QString current_char = ""; QString current_char = "";
int objection_state = 0; int objection_state = 0;
@ -378,10 +379,11 @@ private:
int evidence_rows = 3; int evidence_rows = 3;
int max_evidence_on_page = 18; int max_evidence_on_page = 18;
//is set to true if the bg folder contains defensedesk.png, prosecutiondesk.png and stand.png // is set to true if the bg folder contains defensedesk.png,
// prosecutiondesk.png and stand.png
bool is_ao2_bg = false; bool is_ao2_bg = false;
//whether the ooc chat is server or master chat, true is server // whether the ooc chat is server or master chat, true is server
bool server_ooc = true; bool server_ooc = true;
QString current_background = "default"; QString current_background = "default";
@ -430,11 +432,11 @@ private:
QLineEdit *ui_ooc_chat_message; QLineEdit *ui_ooc_chat_message;
QLineEdit *ui_ooc_chat_name; QLineEdit *ui_ooc_chat_name;
//QLineEdit *ui_area_password; // QLineEdit *ui_area_password;
QLineEdit *ui_music_search; QLineEdit *ui_music_search;
QWidget *ui_emotes; QWidget *ui_emotes;
QVector<AOEmoteButton*> ui_emote_list; QVector<AOEmoteButton *> ui_emote_list;
AOButton *ui_emote_left; AOButton *ui_emote_left;
AOButton *ui_emote_right; AOButton *ui_emote_right;
@ -499,7 +501,7 @@ private:
AOImage *ui_evidence; AOImage *ui_evidence;
AOLineEdit *ui_evidence_name; AOLineEdit *ui_evidence_name;
QWidget *ui_evidence_buttons; QWidget *ui_evidence_buttons;
QVector<AOEvidenceButton*> ui_evidence_list; QVector<AOEvidenceButton *> ui_evidence_list;
AOButton *ui_evidence_left; AOButton *ui_evidence_left;
AOButton *ui_evidence_right; AOButton *ui_evidence_right;
AOButton *ui_evidence_present; AOButton *ui_evidence_present;
@ -512,11 +514,11 @@ private:
AOImage *ui_char_select_background; AOImage *ui_char_select_background;
//abstract widget to hold char buttons // abstract widget to hold char buttons
QWidget *ui_char_buttons; QWidget *ui_char_buttons;
QVector<AOCharButton*> ui_char_button_list; QVector<AOCharButton *> ui_char_button_list;
QVector<AOCharButton*> ui_char_button_list_filtered; QVector<AOCharButton *> ui_char_button_list_filtered;
AOImage *ui_selector; AOImage *ui_selector;
AOButton *ui_back_to_lobby; AOButton *ui_back_to_lobby;
@ -557,7 +559,8 @@ public slots:
void mod_called(QString p_ip); void mod_called(QString p_ip);
void case_called(QString msg, bool def, bool pro, bool jud, bool jur, bool steno); void case_called(QString msg, bool def, bool pro, bool jud, bool jur,
bool steno);
private slots: private slots:
void start_chat_ticking(); void start_chat_ticking();

View File

@ -3,16 +3,14 @@
#include <QString> #include <QString>
struct server_type struct server_type {
{
QString name; QString name;
QString desc; QString desc;
QString ip; QString ip;
int port; int port;
}; };
struct emote_type struct emote_type {
{
QString comment; QString comment;
QString preanim; QString preanim;
QString anim; QString anim;
@ -22,23 +20,20 @@ struct emote_type
int sfx_duration; int sfx_duration;
}; };
struct char_type struct char_type {
{
QString name; QString name;
QString description; QString description;
QString evidence_string; QString evidence_string;
bool taken; bool taken;
}; };
struct evi_type struct evi_type {
{
QString name; QString name;
QString description; QString description;
QString image; QString image;
}; };
struct chatmessage_type struct chatmessage_type {
{
QString message; QString message;
QString character; QString character;
QString side; QString side;
@ -55,29 +50,25 @@ struct chatmessage_type
int flip; int flip;
}; };
struct area_type struct area_type {
{
QString name; QString name;
QString background; QString background;
bool passworded; bool passworded;
}; };
struct pos_type struct pos_type {
{
int x; int x;
int y; int y;
}; };
struct pos_size_type struct pos_size_type {
{
int x = 0; int x = 0;
int y = 0; int y = 0;
int width = 0; int width = 0;
int height = 0; int height = 0;
}; };
enum CHAT_MESSAGE enum CHAT_MESSAGE {
{
DESK_MOD = 0, DESK_MOD = 0,
PRE_EMOTE, PRE_EMOTE,
CHAR_NAME, CHAR_NAME,
@ -103,17 +94,6 @@ enum CHAT_MESSAGE
NONINTERRUPTING_PRE NONINTERRUPTING_PRE
}; };
enum COLOR enum COLOR { WHITE = 0, GREEN, RED, ORANGE, BLUE, YELLOW, RAINBOW, PINK, CYAN };
{
WHITE = 0,
GREEN,
RED,
ORANGE,
BLUE,
YELLOW,
RAINBOW,
PINK,
CYAN
};
#endif // DATATYPES_H #endif // DATATYPES_H

View File

@ -1,8 +1,8 @@
#ifndef DEBUG_FUNCTIONS_H #ifndef DEBUG_FUNCTIONS_H
#define DEBUG_FUNCTIONS_H #define DEBUG_FUNCTIONS_H
#include <QString>
#include <QMessageBox> #include <QMessageBox>
#include <QString>
void call_error(QString message); void call_error(QString message);
void call_notice(QString message); void call_notice(QString message);

View File

@ -24,61 +24,63 @@ extern "C" {
#endif #endif
typedef struct DiscordRichPresence { typedef struct DiscordRichPresence {
const char* state; /* max 128 bytes */ const char *state; /* max 128 bytes */
const char* details; /* max 128 bytes */ const char *details; /* max 128 bytes */
int64_t startTimestamp; int64_t startTimestamp;
int64_t endTimestamp; int64_t endTimestamp;
const char* largeImageKey; /* max 32 bytes */ const char *largeImageKey; /* max 32 bytes */
const char* largeImageText; /* max 128 bytes */ const char *largeImageText; /* max 128 bytes */
const char* smallImageKey; /* max 32 bytes */ const char *smallImageKey; /* max 32 bytes */
const char* smallImageText; /* max 128 bytes */ const char *smallImageText; /* max 128 bytes */
const char* partyId; /* max 128 bytes */ const char *partyId; /* max 128 bytes */
int partySize; int partySize;
int partyMax; int partyMax;
const char* matchSecret; /* max 128 bytes */ const char *matchSecret; /* max 128 bytes */
const char* joinSecret; /* max 128 bytes */ const char *joinSecret; /* max 128 bytes */
const char* spectateSecret; /* max 128 bytes */ const char *spectateSecret; /* max 128 bytes */
int8_t instance; int8_t instance;
} DiscordRichPresence; } DiscordRichPresence;
typedef struct DiscordJoinRequest { typedef struct DiscordJoinRequest {
const char* userId; const char *userId;
const char* username; const char *username;
const char* discriminator; const char *discriminator;
const char* avatar; const char *avatar;
} DiscordJoinRequest; } DiscordJoinRequest;
typedef struct DiscordEventHandlers { typedef struct DiscordEventHandlers {
void (*ready)(void); void (*ready)(void);
void (*disconnected)(int errorCode, const char* message); void (*disconnected)(int errorCode, const char *message);
void (*errored)(int errorCode, const char* message); void (*errored)(int errorCode, const char *message);
void (*joinGame)(const char* joinSecret); void (*joinGame)(const char *joinSecret);
void (*spectateGame)(const char* spectateSecret); void (*spectateGame)(const char *spectateSecret);
void (*joinRequest)(const DiscordJoinRequest* request); void (*joinRequest)(const DiscordJoinRequest *request);
} DiscordEventHandlers; } DiscordEventHandlers;
#define DISCORD_REPLY_NO 0 #define DISCORD_REPLY_NO 0
#define DISCORD_REPLY_YES 1 #define DISCORD_REPLY_YES 1
#define DISCORD_REPLY_IGNORE 2 #define DISCORD_REPLY_IGNORE 2
DISCORD_EXPORT void Discord_Initialize(const char* applicationId, DISCORD_EXPORT void Discord_Initialize(const char *applicationId,
DiscordEventHandlers* handlers, DiscordEventHandlers *handlers,
int autoRegister, int autoRegister,
const char* optionalSteamId); const char *optionalSteamId);
DISCORD_EXPORT void Discord_Shutdown(void); DISCORD_EXPORT void Discord_Shutdown(void);
/* checks for incoming messages, dispatches callbacks */ /* checks for incoming messages, dispatches callbacks */
DISCORD_EXPORT void Discord_RunCallbacks(void); DISCORD_EXPORT void Discord_RunCallbacks(void);
/* If you disable the lib starting its own io thread, you'll need to call this from your own */ /* If you disable the lib starting its own io thread, you'll need to call this
* from your own */
#ifdef DISCORD_DISABLE_IO_THREAD #ifdef DISCORD_DISABLE_IO_THREAD
DISCORD_EXPORT void Discord_UpdateConnection(void); DISCORD_EXPORT void Discord_UpdateConnection(void);
#endif #endif
DISCORD_EXPORT void Discord_UpdatePresence(const DiscordRichPresence* presence); DISCORD_EXPORT void Discord_UpdatePresence(const DiscordRichPresence *presence);
DISCORD_EXPORT void Discord_ClearPresence(void); DISCORD_EXPORT void Discord_ClearPresence(void);
DISCORD_EXPORT void Discord_Respond(const char* userid, /* DISCORD_REPLY_ */ int reply); DISCORD_EXPORT void Discord_Respond(const char *userid,
/* DISCORD_REPLY_ */ int reply);
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */

View File

@ -1,25 +1,27 @@
#pragma once #pragma once
#if defined(DISCORD_DYNAMIC_LIB) #if defined(DISCORD_DYNAMIC_LIB)
# if defined(_WIN32) #if defined(_WIN32)
# if defined(DISCORD_BUILDING_SDK) #if defined(DISCORD_BUILDING_SDK)
# define DISCORD_EXPORT __declspec(dllexport) #define DISCORD_EXPORT __declspec(dllexport)
# else
# define DISCORD_EXPORT __declspec(dllimport)
# endif
# else
# define DISCORD_EXPORT __attribute__((visibility("default")))
# endif
#else #else
# define DISCORD_EXPORT #define DISCORD_EXPORT __declspec(dllimport)
#endif
#else
#define DISCORD_EXPORT __attribute__((visibility("default")))
#endif
#else
#define DISCORD_EXPORT
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
DISCORD_EXPORT void Discord_Register(const char* applicationId, const char* command); DISCORD_EXPORT void Discord_Register(const char *applicationId,
DISCORD_EXPORT void Discord_RegisterSteamGame(const char* applicationId, const char* steamId); const char *command);
DISCORD_EXPORT void Discord_RegisterSteamGame(const char *applicationId,
const char *steamId);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -1,11 +1,11 @@
#ifndef DISCORD_RICH_PRESENCE_H #ifndef DISCORD_RICH_PRESENCE_H
#define DISCORD_RICH_PRESENCE_H #define DISCORD_RICH_PRESENCE_H
#include <QDebug>
#include <cstring> #include <cstring>
#include <ctime> #include <ctime>
#include <QDebug>
#include <string>
#include <discord-rpc.h> #include <discord-rpc.h>
#include <string>
#include <cstring> #include <cstring>
#include <ctime> #include <ctime>
@ -14,12 +14,12 @@
namespace AttorneyOnline { namespace AttorneyOnline {
class Discord class Discord {
{
private: private:
const char* APPLICATION_ID = "399779271737868288"; const char *APPLICATION_ID = "399779271737868288";
std::string server_name, server_id; std::string server_name, server_id;
int64_t timestamp; int64_t timestamp;
public: public:
Discord(); Discord();
~Discord(); ~Discord();
@ -30,5 +30,5 @@ public:
void state_spectate(); void state_spectate();
}; };
} } // namespace AttorneyOnline
#endif // DISCORD_RICH_PRESENCE_H #endif // DISCORD_RICH_PRESENCE_H

View File

@ -24,63 +24,65 @@ extern "C" {
#endif #endif
typedef struct DiscordRichPresence { typedef struct DiscordRichPresence {
const char* state; /* max 128 bytes */ const char *state; /* max 128 bytes */
const char* details; /* max 128 bytes */ const char *details; /* max 128 bytes */
int64_t startTimestamp; int64_t startTimestamp;
int64_t endTimestamp; int64_t endTimestamp;
const char* largeImageKey; /* max 32 bytes */ const char *largeImageKey; /* max 32 bytes */
const char* largeImageText; /* max 128 bytes */ const char *largeImageText; /* max 128 bytes */
const char* smallImageKey; /* max 32 bytes */ const char *smallImageKey; /* max 32 bytes */
const char* smallImageText; /* max 128 bytes */ const char *smallImageText; /* max 128 bytes */
const char* partyId; /* max 128 bytes */ const char *partyId; /* max 128 bytes */
int partySize; int partySize;
int partyMax; int partyMax;
const char* matchSecret; /* max 128 bytes */ const char *matchSecret; /* max 128 bytes */
const char* joinSecret; /* max 128 bytes */ const char *joinSecret; /* max 128 bytes */
const char* spectateSecret; /* max 128 bytes */ const char *spectateSecret; /* max 128 bytes */
int8_t instance; int8_t instance;
} DiscordRichPresence; } DiscordRichPresence;
typedef struct DiscordUser { typedef struct DiscordUser {
const char* userId; const char *userId;
const char* username; const char *username;
const char* discriminator; const char *discriminator;
const char* avatar; const char *avatar;
} DiscordUser; } DiscordUser;
typedef struct DiscordEventHandlers { typedef struct DiscordEventHandlers {
void (*ready)(const DiscordUser* request); void (*ready)(const DiscordUser *request);
void (*disconnected)(int errorCode, const char* message); void (*disconnected)(int errorCode, const char *message);
void (*errored)(int errorCode, const char* message); void (*errored)(int errorCode, const char *message);
void (*joinGame)(const char* joinSecret); void (*joinGame)(const char *joinSecret);
void (*spectateGame)(const char* spectateSecret); void (*spectateGame)(const char *spectateSecret);
void (*joinRequest)(const DiscordUser* request); void (*joinRequest)(const DiscordUser *request);
} DiscordEventHandlers; } DiscordEventHandlers;
#define DISCORD_REPLY_NO 0 #define DISCORD_REPLY_NO 0
#define DISCORD_REPLY_YES 1 #define DISCORD_REPLY_YES 1
#define DISCORD_REPLY_IGNORE 2 #define DISCORD_REPLY_IGNORE 2
DISCORD_EXPORT void Discord_Initialize(const char* applicationId, DISCORD_EXPORT void Discord_Initialize(const char *applicationId,
DiscordEventHandlers* handlers, DiscordEventHandlers *handlers,
int autoRegister, int autoRegister,
const char* optionalSteamId); const char *optionalSteamId);
DISCORD_EXPORT void Discord_Shutdown(void); DISCORD_EXPORT void Discord_Shutdown(void);
/* checks for incoming messages, dispatches callbacks */ /* checks for incoming messages, dispatches callbacks */
DISCORD_EXPORT void Discord_RunCallbacks(void); DISCORD_EXPORT void Discord_RunCallbacks(void);
/* If you disable the lib starting its own io thread, you'll need to call this from your own */ /* If you disable the lib starting its own io thread, you'll need to call this
* from your own */
#ifdef DISCORD_DISABLE_IO_THREAD #ifdef DISCORD_DISABLE_IO_THREAD
DISCORD_EXPORT void Discord_UpdateConnection(void); DISCORD_EXPORT void Discord_UpdateConnection(void);
#endif #endif
DISCORD_EXPORT void Discord_UpdatePresence(const DiscordRichPresence* presence); DISCORD_EXPORT void Discord_UpdatePresence(const DiscordRichPresence *presence);
DISCORD_EXPORT void Discord_ClearPresence(void); DISCORD_EXPORT void Discord_ClearPresence(void);
DISCORD_EXPORT void Discord_Respond(const char* userid, /* DISCORD_REPLY_ */ int reply); DISCORD_EXPORT void Discord_Respond(const char *userid,
/* DISCORD_REPLY_ */ int reply);
DISCORD_EXPORT void Discord_UpdateHandlers(DiscordEventHandlers* handlers); DISCORD_EXPORT void Discord_UpdateHandlers(DiscordEventHandlers *handlers);
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */

View File

@ -3,11 +3,11 @@
#include <QString> #include <QString>
#include <cstddef>
#include <stdlib.h>
#include <sstream>
#include <iomanip>
#include <QVector> #include <QVector>
#include <cstddef>
#include <iomanip>
#include <sstream>
#include <stdlib.h>
QString fanta_encrypt(QString p_input, unsigned int key); QString fanta_encrypt(QString p_input, unsigned int key);
QString fanta_decrypt(QString p_input, unsigned int key); QString fanta_decrypt(QString p_input, unsigned int key);

View File

@ -1,8 +1,8 @@
#ifndef FILE_FUNCTIONS_H #ifndef FILE_FUNCTIONS_H
#define FILE_FUNCTIONS_H #define FILE_FUNCTIONS_H
#include <QFileInfo>
#include <QDir> #include <QDir>
#include <QFileInfo>
#include <QString> #include <QString>
bool file_exists(QString file_path); bool file_exists(QString file_path);

View File

@ -1,17 +1,16 @@
#ifndef HEX_OPERATIONS_H #ifndef HEX_OPERATIONS_H
#define HEX_OPERATIONS_H #define HEX_OPERATIONS_H
#include <algorithm>
#include <bitset> #include <bitset>
#include <cstdint> #include <cstdint>
#include <iostream>
#include <algorithm>
#include <string>
#include <iomanip> #include <iomanip>
#include <iostream>
#include <sstream> #include <sstream>
#include <string>
namespace omni namespace omni {
{ std::string int_to_hex(unsigned int input);
std::string int_to_hex(unsigned int input);
} }
#endif //HEX_OPERATIONS_H #endif // HEX_OPERATIONS_H

View File

@ -1,16 +1,16 @@
#ifndef LOBBY_H #ifndef LOBBY_H
#define LOBBY_H #define LOBBY_H
#include "aoimage.h"
#include "aobutton.h" #include "aobutton.h"
#include "aoimage.h"
#include "aopacket.h" #include "aopacket.h"
#include "aotextarea.h" #include "aotextarea.h"
#include <QMainWindow>
#include <QListWidget>
#include <QLabel> #include <QLabel>
#include <QPlainTextEdit>
#include <QLineEdit> #include <QLineEdit>
#include <QListWidget>
#include <QMainWindow>
#include <QPlainTextEdit>
#include <QProgressBar> #include <QProgressBar>
#include <QTextBrowser> #include <QTextBrowser>
@ -19,8 +19,7 @@
class AOApplication; class AOApplication;
class Lobby : public QMainWindow class Lobby : public QMainWindow {
{
Q_OBJECT Q_OBJECT
public: public:
@ -33,8 +32,8 @@ public:
void append_error(QString f_message); void append_error(QString f_message);
void set_player_count(int players_online, int max_players); void set_player_count(int players_online, int max_players);
void set_loading_text(QString p_text); void set_loading_text(QString p_text);
void show_loading_overlay(){ui_loading_background->show();} void show_loading_overlay() { ui_loading_background->show(); }
void hide_loading_overlay(){ui_loading_background->hide();} void hide_loading_overlay() { ui_loading_background->hide(); }
QString get_chatlog(); QString get_chatlog();
int get_selected_server(); int get_selected_server();
void enable_connect_button(); void enable_connect_button();

View File

@ -1,8 +1,8 @@
#ifndef MISC_FUNCTIONS_H #ifndef MISC_FUNCTIONS_H
#define MISC_FUNCTIONS_H #define MISC_FUNCTIONS_H
#include <QTime>
#include <QCoreApplication> #include <QCoreApplication>
#include <QTime>
void delay(int p_milliseconds); void delay(int p_milliseconds);

View File

@ -1,8 +1,8 @@
#ifndef NETWORKMANAGER_H #ifndef NETWORKMANAGER_H
#define NETWORKMANAGER_H #define NETWORKMANAGER_H
// Qt for Android has stubbed QDnsLookup. This is not documented in any part of their wiki. // Qt for Android has stubbed QDnsLookup. This is not documented in any part of
// This prevents SRV lookup/failover behavior from functioning. // their wiki. This prevents SRV lookup/failover behavior from functioning.
// https://bugreports.qt.io/browse/QTBUG-56143 // https://bugreports.qt.io/browse/QTBUG-56143
#ifndef ANDROID #ifndef ANDROID
#define MS_FAILOVER_SUPPORTED #define MS_FAILOVER_SUPPORTED
@ -14,17 +14,16 @@
#undef MS_FAILOVER_SUPPORTED #undef MS_FAILOVER_SUPPORTED
#endif #endif
#include "aopacket.h"
#include "aoapplication.h" #include "aoapplication.h"
#include "aopacket.h"
#include <QTcpSocket>
#include <QDnsLookup> #include <QDnsLookup>
#include <QTcpSocket>
#include <QTime> #include <QTime>
#include <QTimer> #include <QTimer>
#include <cstring> #include <cstring>
class NetworkManager : public QObject class NetworkManager : public QObject {
{
Q_OBJECT Q_OBJECT
public: public:

View File

@ -3,11 +3,11 @@
#include "aoapplication.h" #include "aoapplication.h"
#include "file_functions.h" #include "file_functions.h"
#include <QTextStream>
#include <QStringList>
#include <QVector>
#include <QDebug>
#include <QColor> #include <QColor>
#include <QDebug>
#include <QSettings> #include <QSettings>
#include <QStringList>
#include <QTextStream>
#include <QVector>
#endif // TEXT_FILE_FUNCTIONS_H #endif // TEXT_FILE_FUNCTIONS_H

View File

@ -1,17 +1,18 @@
#include "aoapplication.h" #include "aoapplication.h"
#include "lobby.h"
#include "courtroom.h" #include "courtroom.h"
#include "networkmanager.h"
#include "debug_functions.h" #include "debug_functions.h"
#include "lobby.h"
#include "networkmanager.h"
#include "aooptionsdialog.h"
#include "aocaseannouncerdialog.h" #include "aocaseannouncerdialog.h"
#include "aooptionsdialog.h"
AOApplication::AOApplication(int &argc, char **argv) : QApplication(argc, argv) AOApplication::AOApplication(int &argc, char **argv) : QApplication(argc, argv)
{ {
// Create the QSettings class that points to the config.ini. // Create the QSettings class that points to the config.ini.
configini = new QSettings(get_base_path() + "config.ini", QSettings::IniFormat); configini =
new QSettings(get_base_path() + "config.ini", QSettings::IniFormat);
net_manager = new NetworkManager(this); net_manager = new NetworkManager(this);
discord = new AttorneyOnline::Discord(); discord = new AttorneyOnline::Discord();
@ -28,8 +29,7 @@ AOApplication::~AOApplication()
void AOApplication::construct_lobby() void AOApplication::construct_lobby()
{ {
if (lobby_constructed) if (lobby_constructed) {
{
qDebug() << "W: lobby was attempted constructed when it already exists"; qDebug() << "W: lobby was attempted constructed when it already exists";
return; return;
} }
@ -38,8 +38,8 @@ void AOApplication::construct_lobby()
lobby_constructed = true; lobby_constructed = true;
QRect geometry = QGuiApplication::primaryScreen()->geometry(); QRect geometry = QGuiApplication::primaryScreen()->geometry();
int x = (geometry.width()-w_lobby->width()) / 2; int x = (geometry.width() - w_lobby->width()) / 2;
int y = (geometry.height()-w_lobby->height()) / 2; int y = (geometry.height() - w_lobby->height()) / 2;
w_lobby->move(x, y); w_lobby->move(x, y);
if (is_discord_enabled()) if (is_discord_enabled())
@ -50,8 +50,7 @@ void AOApplication::construct_lobby()
void AOApplication::destruct_lobby() void AOApplication::destruct_lobby()
{ {
if(!lobby_constructed) if (!lobby_constructed) {
{
qDebug() << "W: lobby was attempted destructed when it did not exist"; qDebug() << "W: lobby was attempted destructed when it did not exist";
return; return;
} }
@ -63,8 +62,7 @@ void AOApplication::destruct_lobby()
void AOApplication::construct_courtroom() void AOApplication::construct_courtroom()
{ {
if (courtroom_constructed) if (courtroom_constructed) {
{
qDebug() << "W: courtroom was attempted constructed when it already exists"; qDebug() << "W: courtroom was attempted constructed when it already exists";
return; return;
} }
@ -73,15 +71,14 @@ void AOApplication::construct_courtroom()
courtroom_constructed = true; courtroom_constructed = true;
QRect geometry = QGuiApplication::primaryScreen()->geometry(); QRect geometry = QGuiApplication::primaryScreen()->geometry();
int x = (geometry.width()-w_courtroom->width()) / 2; int x = (geometry.width() - w_courtroom->width()) / 2;
int y = (geometry.height()-w_courtroom->height()) / 2; int y = (geometry.height() - w_courtroom->height()) / 2;
w_courtroom->move(x, y); w_courtroom->move(x, y);
} }
void AOApplication::destruct_courtroom() void AOApplication::destruct_courtroom()
{ {
if (!courtroom_constructed) if (!courtroom_constructed) {
{
qDebug() << "W: courtroom was attempted destructed when it did not exist"; qDebug() << "W: courtroom was attempted destructed when it did not exist";
return; return;
} }
@ -93,16 +90,11 @@ void AOApplication::destruct_courtroom()
QString AOApplication::get_version_string() QString AOApplication::get_version_string()
{ {
return return QString::number(RELEASE) + "." + QString::number(MAJOR_VERSION) + "." +
QString::number(RELEASE) + "." +
QString::number(MAJOR_VERSION) + "." +
QString::number(MINOR_VERSION); QString::number(MINOR_VERSION);
} }
void AOApplication::reload_theme() void AOApplication::reload_theme() { current_theme = read_theme(); }
{
current_theme = read_theme();
}
void AOApplication::set_favorite_list() void AOApplication::set_favorite_list()
{ {
@ -133,8 +125,7 @@ void AOApplication::add_favorite_server(int p_server)
void AOApplication::server_disconnected() void AOApplication::server_disconnected()
{ {
if (courtroom_constructed) if (courtroom_constructed) {
{
call_notice("Disconnected from server."); call_notice("Disconnected from server.");
construct_lobby(); construct_lobby();
destruct_courtroom(); destruct_courtroom();
@ -150,26 +141,26 @@ void AOApplication::loading_cancelled()
void AOApplication::ms_connect_finished(bool connected, bool will_retry) void AOApplication::ms_connect_finished(bool connected, bool will_retry)
{ {
if (connected) if (connected) {
{
AOPacket *f_packet = new AOPacket("ALL#%"); AOPacket *f_packet = new AOPacket("ALL#%");
send_ms_packet(f_packet); send_ms_packet(f_packet);
} }
else else {
{ if (will_retry) {
if (will_retry)
{
if (lobby_constructed) if (lobby_constructed)
w_lobby->append_error("Error connecting to master server. Will try again in " w_lobby->append_error(
+ QString::number(net_manager->ms_reconnect_delay) + " seconds."); "Error connecting to master server. Will try again in " +
QString::number(net_manager->ms_reconnect_delay) + " seconds.");
} }
else else {
{
call_error("There was an error connecting to the master server.\n" call_error("There was an error connecting to the master server.\n"
"We deploy multiple master servers to mitigate any possible downtime, " "We deploy multiple master servers to mitigate any possible "
"but the client appears to have exhausted all possible methods of finding " "downtime, "
"but the client appears to have exhausted all possible "
"methods of finding "
"and connecting to one.\n" "and connecting to one.\n"
"Please check your Internet connection and firewall, and please try again."); "Please check your Internet connection and firewall, and "
"please try again.");
} }
} }
} }

View File

@ -1,6 +1,6 @@
#include "aoblipplayer.h" #include "aoblipplayer.h"
#if defined(BASSAUDIO) //Using bass.dll for the blips #if defined(BASSAUDIO) // Using bass.dll for the blips
AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app) AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app)
{ {
m_parent = parent; m_parent = parent;
@ -11,11 +11,11 @@ void AOBlipPlayer::set_blips(QString p_sfx)
{ {
QString f_path = ao_app->get_sounds_path(p_sfx); QString f_path = ao_app->get_sounds_path(p_sfx);
for (int n_stream = 0 ; n_stream < 5 ; ++n_stream) for (int n_stream = 0; n_stream < 5; ++n_stream) {
{
BASS_StreamFree(m_stream_list[n_stream]); BASS_StreamFree(m_stream_list[n_stream]);
m_stream_list[n_stream] = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_UNICODE | BASS_ASYNCFILE); m_stream_list[n_stream] = BASS_StreamCreateFile(
FALSE, f_path.utf16(), 0, 0, BASS_UNICODE | BASS_ASYNCFILE);
} }
set_volume(m_volume); set_volume(m_volume);
@ -40,12 +40,11 @@ void AOBlipPlayer::set_volume(int p_value)
float volume = p_value / 100.0f; float volume = p_value / 100.0f;
for (int n_stream = 0 ; n_stream < 5 ; ++n_stream) for (int n_stream = 0; n_stream < 5; ++n_stream) {
{
BASS_ChannelSetAttribute(m_stream_list[n_stream], BASS_ATTRIB_VOL, volume); BASS_ChannelSetAttribute(m_stream_list[n_stream], BASS_ATTRIB_VOL, volume);
} }
} }
#elif defined(QTAUDIO) //Using Qt's QSoundEffect class #elif defined(QTAUDIO) // Using Qt's QSoundEffect class
AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app) AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app)
{ {
m_parent = parent; m_parent = parent;
@ -56,8 +55,7 @@ void AOBlipPlayer::set_blips(QString p_sfx)
{ {
QString f_path = ao_app->get_sounds_path(p_sfx); QString f_path = ao_app->get_sounds_path(p_sfx);
for (int n_stream = 0 ; n_stream < 5 ; ++n_stream) for (int n_stream = 0; n_stream < 5; ++n_stream) {
{
m_blips.setSource(QUrl::fromLocalFile(f_path)); m_blips.setSource(QUrl::fromLocalFile(f_path));
} }
@ -79,25 +77,16 @@ void AOBlipPlayer::set_volume(int p_value)
m_volume = p_value; m_volume = p_value;
m_blips.setVolume(m_volume); m_blips.setVolume(m_volume);
} }
#else //No audio #else // No audio
AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app) AOBlipPlayer::AOBlipPlayer(QWidget *parent, AOApplication *p_ao_app)
{ {
m_parent = parent; m_parent = parent;
ao_app = p_ao_app; ao_app = p_ao_app;
} }
void AOBlipPlayer::set_blips(QString p_sfx) void AOBlipPlayer::set_blips(QString p_sfx) {}
{
} void AOBlipPlayer::blip_tick() {}
void AOBlipPlayer::blip_tick() void AOBlipPlayer::set_volume(int p_value) {}
{
}
void AOBlipPlayer::set_volume(int p_value)
{
}
#endif #endif

View File

@ -3,15 +3,13 @@
#include "debug_functions.h" #include "debug_functions.h"
#include "file_functions.h" #include "file_functions.h"
AOButton::AOButton(QWidget *parent, AOApplication *p_ao_app) : QPushButton(parent) AOButton::AOButton(QWidget *parent, AOApplication *p_ao_app)
: QPushButton(parent)
{ {
ao_app = p_ao_app; ao_app = p_ao_app;
} }
AOButton::~AOButton() AOButton::~AOButton() {}
{
}
void AOButton::set_image(QString p_image) void AOButton::set_image(QString p_image)
{ {
@ -23,4 +21,3 @@ void AOButton::set_image(QString p_image)
else else
this->setStyleSheet("border-image:url(\"" + default_image_path + "\")"); this->setStyleSheet("border-image:url(\"" + default_image_path + "\")");
} }

View File

@ -1,6 +1,8 @@
#include "aocaseannouncerdialog.h" #include "aocaseannouncerdialog.h"
AOCaseAnnouncerDialog::AOCaseAnnouncerDialog(QWidget *parent, AOApplication *p_ao_app, Courtroom *p_court) AOCaseAnnouncerDialog::AOCaseAnnouncerDialog(QWidget *parent,
AOApplication *p_ao_app,
Courtroom *p_court)
: QDialog(parent) : QDialog(parent)
{ {
ao_app = p_ao_app; ao_app = p_ao_app;
@ -14,21 +16,27 @@ AOCaseAnnouncerDialog::AOCaseAnnouncerDialog(QWidget *parent, AOApplication *p_a
QSizePolicy sizepolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); QSizePolicy sizepolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
sizepolicy.setHorizontalStretch(0); sizepolicy.setHorizontalStretch(0);
sizepolicy.setVerticalStretch(0); sizepolicy.setVerticalStretch(0);
sizepolicy.setHeightForWidth(ui_announcer_buttons->sizePolicy().hasHeightForWidth()); sizepolicy.setHeightForWidth(
ui_announcer_buttons->sizePolicy().hasHeightForWidth());
ui_announcer_buttons->setSizePolicy(sizepolicy); ui_announcer_buttons->setSizePolicy(sizepolicy);
ui_announcer_buttons->setOrientation(Qt::Horizontal); ui_announcer_buttons->setOrientation(Qt::Horizontal);
ui_announcer_buttons->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); ui_announcer_buttons->setStandardButtons(QDialogButtonBox::Ok |
QDialogButtonBox::Cancel);
QObject::connect(ui_announcer_buttons, SIGNAL(accepted()), this, SLOT(ok_pressed())); QObject::connect(ui_announcer_buttons, SIGNAL(accepted()), this,
QObject::connect(ui_announcer_buttons, SIGNAL(rejected()), this, SLOT(cancel_pressed())); SLOT(ok_pressed()));
QObject::connect(ui_announcer_buttons, SIGNAL(rejected()), this,
SLOT(cancel_pressed()));
setUpdatesEnabled(false); setUpdatesEnabled(false);
ui_vbox_layout = new QVBoxLayout(this); ui_vbox_layout = new QVBoxLayout(this);
ui_form_layout = new QFormLayout(this); ui_form_layout = new QFormLayout(this);
ui_form_layout->setLabelAlignment(Qt::AlignLeading | Qt::AlignLeft | Qt::AlignVCenter); ui_form_layout->setLabelAlignment(Qt::AlignLeading | Qt::AlignLeft |
ui_form_layout->setFormAlignment(Qt::AlignLeading | Qt::AlignLeft | Qt::AlignTop); Qt::AlignVCenter);
ui_form_layout->setFormAlignment(Qt::AlignLeading | Qt::AlignLeft |
Qt::AlignTop);
ui_form_layout->setContentsMargins(6, 6, 6, 6); ui_form_layout->setContentsMargins(6, 6, 6, 6);
ui_vbox_layout->addItem(ui_form_layout); ui_vbox_layout->addItem(ui_form_layout);
@ -66,17 +74,12 @@ AOCaseAnnouncerDialog::AOCaseAnnouncerDialog(QWidget *parent, AOApplication *p_a
void AOCaseAnnouncerDialog::ok_pressed() void AOCaseAnnouncerDialog::ok_pressed()
{ {
court->announce_case(ui_case_title_textbox->text(), court->announce_case(
ui_defense_needed->isChecked(), ui_case_title_textbox->text(), ui_defense_needed->isChecked(),
ui_prosecutor_needed->isChecked(), ui_prosecutor_needed->isChecked(), ui_judge_needed->isChecked(),
ui_judge_needed->isChecked(), ui_juror_needed->isChecked(), ui_steno_needed->isChecked());
ui_juror_needed->isChecked(),
ui_steno_needed->isChecked());
done(0); done(0);
} }
void AOCaseAnnouncerDialog::cancel_pressed() void AOCaseAnnouncerDialog::cancel_pressed() { done(0); }
{
done(0);
}

View File

@ -2,7 +2,9 @@
#include "file_functions.h" #include "file_functions.h"
AOCharButton::AOCharButton(QWidget *parent, AOApplication *p_ao_app, int x_pos, int y_pos, bool is_taken) : QPushButton(parent) AOCharButton::AOCharButton(QWidget *parent, AOApplication *p_ao_app, int x_pos,
int y_pos, bool is_taken)
: QPushButton(parent)
{ {
m_parent = parent; m_parent = parent;
@ -40,28 +42,20 @@ void AOCharButton::reset()
ui_selector->hide(); ui_selector->hide();
} }
void AOCharButton::set_taken(bool is_taken) void AOCharButton::set_taken(bool is_taken) { taken = is_taken; }
{
taken = is_taken;
}
void AOCharButton::apply_taken_image() void AOCharButton::apply_taken_image()
{ {
if (taken) if (taken) {
{ ui_taken->move(0, 0);
ui_taken->move(0,0);
ui_taken->show(); ui_taken->show();
} }
else else {
{
ui_taken->hide(); ui_taken->hide();
} }
} }
void AOCharButton::set_passworded() void AOCharButton::set_passworded() { ui_passworded->show(); }
{
ui_passworded->show();
}
void AOCharButton::set_image(QString p_character) void AOCharButton::set_image(QString p_character)
{ {
@ -71,14 +65,13 @@ void AOCharButton::set_image(QString p_character)
if (file_exists(image_path)) if (file_exists(image_path))
this->setStyleSheet("border-image:url(\"" + image_path + "\")"); this->setStyleSheet("border-image:url(\"" + image_path + "\")");
else else {
{
this->setStyleSheet("border-image:url()"); this->setStyleSheet("border-image:url()");
this->setText(p_character); this->setText(p_character);
} }
} }
void AOCharButton::enterEvent(QEvent * e) void AOCharButton::enterEvent(QEvent *e)
{ {
ui_selector->move(this->x() - 1, this->y() - 1); ui_selector->move(this->x() - 1, this->y() - 1);
ui_selector->raise(); ui_selector->raise();
@ -88,10 +81,8 @@ void AOCharButton::enterEvent(QEvent * e)
QPushButton::enterEvent(e); QPushButton::enterEvent(e);
} }
void AOCharButton::leaveEvent(QEvent * e) void AOCharButton::leaveEvent(QEvent *e)
{ {
ui_selector->hide(); ui_selector->hide();
QPushButton::leaveEvent(e); QPushButton::leaveEvent(e);
} }

View File

@ -1,10 +1,11 @@
#include "aocharmovie.h" #include "aocharmovie.h"
#include "misc_functions.h"
#include "file_functions.h"
#include "aoapplication.h" #include "aoapplication.h"
#include "file_functions.h"
#include "misc_functions.h"
AOCharMovie::AOCharMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent) AOCharMovie::AOCharMovie(QWidget *p_parent, AOApplication *p_ao_app)
: QLabel(p_parent)
{ {
ao_app = p_ao_app; ao_app = p_ao_app;
@ -19,11 +20,14 @@ AOCharMovie::AOCharMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_
void AOCharMovie::play(QString p_char, QString p_emote, QString emote_prefix) void AOCharMovie::play(QString p_char, QString p_emote, QString emote_prefix)
{ {
QString original_path = ao_app->get_character_path(p_char, emote_prefix + p_emote + ".gif"); QString original_path =
ao_app->get_character_path(p_char, emote_prefix + p_emote + ".gif");
QString alt_path = ao_app->get_character_path(p_char, p_emote + ".png"); QString alt_path = ao_app->get_character_path(p_char, p_emote + ".png");
QString apng_path = ao_app->get_character_path(p_char, emote_prefix + p_emote + ".apng"); QString apng_path =
ao_app->get_character_path(p_char, emote_prefix + p_emote + ".apng");
QString placeholder_path = ao_app->get_theme_path("placeholder.gif"); QString placeholder_path = ao_app->get_theme_path("placeholder.gif");
QString placeholder_default_path = ao_app->get_default_theme_path("placeholder.gif"); QString placeholder_default_path =
ao_app->get_default_theme_path("placeholder.gif");
QString gif_path; QString gif_path;
if (file_exists(apng_path)) if (file_exists(apng_path))
@ -44,8 +48,7 @@ void AOCharMovie::play(QString p_char, QString p_emote, QString emote_prefix)
movie_frames.clear(); movie_frames.clear();
QImage f_image = reader->read(); QImage f_image = reader->read();
while (!f_image.isNull()) while (!f_image.isNull()) {
{
if (m_flipped) if (m_flipped)
movie_frames.append(f_image.mirrored(true, false)); movie_frames.append(f_image.mirrored(true, false));
else else
@ -73,8 +76,7 @@ void AOCharMovie::play_pre(QString p_char, QString p_emote, int duration)
play_once = false; play_once = false;
for (int n_frame = 0 ; n_frame < m_movie->frameCount() ; ++n_frame) for (int n_frame = 0; n_frame < m_movie->frameCount(); ++n_frame) {
{
real_duration += m_movie->nextFrameDelay(); real_duration += m_movie->nextFrameDelay();
m_movie->jumpToFrame(n_frame + 1); m_movie->jumpToFrame(n_frame + 1);
} }
@ -86,8 +88,7 @@ void AOCharMovie::play_pre(QString p_char, QString p_emote, int duration)
double percentage_modifier = 100.0; double percentage_modifier = 100.0;
if (real_duration != 0 && duration != 0) if (real_duration != 0 && duration != 0) {
{
double modifier = full_duration / static_cast<double>(real_duration); double modifier = full_duration / static_cast<double>(real_duration);
percentage_modifier = 100 / modifier; percentage_modifier = 100 / modifier;
@ -99,17 +100,14 @@ void AOCharMovie::play_pre(QString p_char, QString p_emote, int duration)
qDebug() << "% mod: " << percentage_modifier; qDebug() << "% mod: " << percentage_modifier;
#endif #endif
if (full_duration == 0 || full_duration >= real_duration) if (full_duration == 0 || full_duration >= real_duration) {
{
play_once = true; play_once = true;
} }
else else {
{
play_once = false; play_once = false;
preanim_timer->start(full_duration); preanim_timer->start(full_duration);
} }
m_movie->setSpeed(static_cast<int>(percentage_modifier)); m_movie->setSpeed(static_cast<int>(percentage_modifier));
play(p_char, p_emote, ""); play(p_char, p_emote, "");
} }
@ -142,7 +140,8 @@ void AOCharMovie::play_idle(QString p_char, QString p_emote)
void AOCharMovie::stop() void AOCharMovie::stop()
{ {
//for all intents and purposes, stopping is the same as hiding. at no point do we want a frozen gif to display // for all intents and purposes, stopping is the same as hiding. at no point
// do we want a frozen gif to display
m_movie->stop(); m_movie->stop();
preanim_timer->stop(); preanim_timer->stop();
this->hide(); this->hide();
@ -165,31 +164,28 @@ void AOCharMovie::move(int ax, int ay)
void AOCharMovie::frame_change(int n_frame) void AOCharMovie::frame_change(int n_frame)
{ {
if (movie_frames.size() > n_frame) if (movie_frames.size() > n_frame) {
{
QPixmap f_pixmap = QPixmap::fromImage(movie_frames.at(n_frame)); QPixmap f_pixmap = QPixmap::fromImage(movie_frames.at(n_frame));
auto aspect_ratio = Qt::KeepAspectRatio; auto aspect_ratio = Qt::KeepAspectRatio;
if (f_pixmap.size().width() > f_pixmap.size().height()) if (f_pixmap.size().width() > f_pixmap.size().height())
aspect_ratio = Qt::KeepAspectRatioByExpanding; aspect_ratio = Qt::KeepAspectRatioByExpanding;
if (f_pixmap.size().width() > this->size().width() || f_pixmap.size().height() > this->size().height()) if (f_pixmap.size().width() > this->size().width() ||
this->setPixmap(f_pixmap.scaled(this->width(), this->height(), aspect_ratio, Qt::SmoothTransformation)); f_pixmap.size().height() > this->size().height())
this->setPixmap(f_pixmap.scaled(this->width(), this->height(),
aspect_ratio, Qt::SmoothTransformation));
else else
this->setPixmap(f_pixmap.scaled(this->width(), this->height(), aspect_ratio, Qt::FastTransformation)); this->setPixmap(f_pixmap.scaled(this->width(), this->height(),
aspect_ratio, Qt::FastTransformation));
QLabel::move(x + (this->width() - this->pixmap()->width())/2, y); QLabel::move(x + (this->width() - this->pixmap()->width()) / 2, y);
} }
if (m_movie->frameCount() - 1 == n_frame && play_once) if (m_movie->frameCount() - 1 == n_frame && play_once) {
{
preanim_timer->start(m_movie->nextFrameDelay()); preanim_timer->start(m_movie->nextFrameDelay());
m_movie->stop(); m_movie->stop();
} }
} }
void AOCharMovie::timer_done() void AOCharMovie::timer_done() { done(); }
{
done();
}

View File

@ -2,7 +2,9 @@
#include "file_functions.h" #include "file_functions.h"
AOEmoteButton::AOEmoteButton(QWidget *p_parent, AOApplication *p_ao_app, int p_x, int p_y) : QPushButton(p_parent) AOEmoteButton::AOEmoteButton(QWidget *p_parent, AOApplication *p_ao_app,
int p_x, int p_y)
: QPushButton(p_parent)
{ {
parent = p_parent; parent = p_parent;
ao_app = p_ao_app; ao_app = p_ao_app;
@ -16,21 +18,17 @@ AOEmoteButton::AOEmoteButton(QWidget *p_parent, AOApplication *p_ao_app, int p_x
void AOEmoteButton::set_image(QString p_char, int p_emote, QString suffix) void AOEmoteButton::set_image(QString p_char, int p_emote, QString suffix)
{ {
QString emotion_number = QString::number(p_emote + 1); QString emotion_number = QString::number(p_emote + 1);
QString image_path = ao_app->get_character_path(p_char, "emotions/button" + emotion_number + suffix); QString image_path = ao_app->get_character_path(
p_char, "emotions/button" + emotion_number + suffix);
if (file_exists(image_path)) if (file_exists(image_path)) {
{
this->setText(""); this->setText("");
this->setStyleSheet("border-image:url(\"" + image_path + "\")"); this->setStyleSheet("border-image:url(\"" + image_path + "\")");
} }
else else {
{
this->setText(ao_app->get_emote_comment(p_char, p_emote)); this->setText(ao_app->get_emote_comment(p_char, p_emote));
this->setStyleSheet("border-image:url(\"\")"); this->setStyleSheet("border-image:url(\"\")");
} }
} }
void AOEmoteButton::on_clicked() void AOEmoteButton::on_clicked() { emote_clicked(m_id); }
{
emote_clicked(m_id);
}

View File

@ -2,7 +2,9 @@
#include "file_functions.h" #include "file_functions.h"
AOEvidenceButton::AOEvidenceButton(QWidget *p_parent, AOApplication *p_ao_app, int p_x, int p_y) : QPushButton(p_parent) AOEvidenceButton::AOEvidenceButton(QWidget *p_parent, AOApplication *p_ao_app,
int p_x, int p_y)
: QPushButton(p_parent)
{ {
ao_app = p_ao_app; ao_app = p_ao_app;
m_parent = p_parent; m_parent = p_parent;
@ -39,13 +41,11 @@ void AOEvidenceButton::set_image(QString p_image)
{ {
QString image_path = ao_app->get_evidence_path(p_image); QString image_path = ao_app->get_evidence_path(p_image);
if (file_exists(image_path)) if (file_exists(image_path)) {
{
this->setText(""); this->setText("");
this->setStyleSheet("border-image:url(\"" + image_path + "\")"); this->setStyleSheet("border-image:url(\"" + image_path + "\")");
} }
else else {
{
this->setText(p_image); this->setText(p_image);
this->setStyleSheet(""); this->setStyleSheet("");
} }
@ -75,10 +75,7 @@ void AOEvidenceButton::set_selected(bool p_selected)
ui_selected->hide(); ui_selected->hide();
} }
void AOEvidenceButton::on_clicked() void AOEvidenceButton::on_clicked() { evidence_clicked(m_id); }
{
evidence_clicked(m_id);
}
void AOEvidenceButton::mouseDoubleClickEvent(QMouseEvent *e) void AOEvidenceButton::mouseDoubleClickEvent(QMouseEvent *e)
{ {
@ -102,7 +99,7 @@ void AOEvidenceButton::dragEnterEvent(QMouseEvent *e)
} }
*/ */
void AOEvidenceButton::enterEvent(QEvent * e) void AOEvidenceButton::enterEvent(QEvent *e)
{ {
ui_selector->show(); ui_selector->show();
@ -112,7 +109,7 @@ void AOEvidenceButton::enterEvent(QEvent * e)
QPushButton::enterEvent(e); QPushButton::enterEvent(e);
} }
void AOEvidenceButton::leaveEvent(QEvent * e) void AOEvidenceButton::leaveEvent(QEvent *e)
{ {
ui_selector->hide(); ui_selector->hide();

View File

@ -1,10 +1,11 @@
#include "aoevidencedisplay.h" #include "aoevidencedisplay.h"
#include "file_functions.h"
#include "datatypes.h" #include "datatypes.h"
#include "file_functions.h"
#include "misc_functions.h" #include "misc_functions.h"
AOEvidenceDisplay::AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent) AOEvidenceDisplay::AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app)
: QLabel(p_parent)
{ {
ao_app = p_ao_app; ao_app = p_ao_app;
@ -12,10 +13,12 @@ AOEvidenceDisplay::AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app)
evidence_icon = new QLabel(this); evidence_icon = new QLabel(this);
sfx_player = new AOSfxPlayer(this, ao_app); sfx_player = new AOSfxPlayer(this, ao_app);
connect(evidence_movie, SIGNAL(frameChanged(int)), this, SLOT(frame_change(int))); connect(evidence_movie, SIGNAL(frameChanged(int)), this,
SLOT(frame_change(int)));
} }
void AOEvidenceDisplay::show_evidence(QString p_evidence_image, bool is_left_side, int p_volume) void AOEvidenceDisplay::show_evidence(QString p_evidence_image,
bool is_left_side, int p_volume)
{ {
this->reset(); this->reset();
@ -29,23 +32,23 @@ void AOEvidenceDisplay::show_evidence(QString p_evidence_image, bool is_left_sid
QString gif_name; QString gif_name;
QString icon_identifier; QString icon_identifier;
if (is_left_side) if (is_left_side) {
{
icon_identifier = "left_evidence_icon"; icon_identifier = "left_evidence_icon";
gif_name = "evidence_appear_left.gif"; gif_name = "evidence_appear_left.gif";
} }
else else {
{
icon_identifier = "right_evidence_icon"; icon_identifier = "right_evidence_icon";
gif_name = "evidence_appear_right.gif"; gif_name = "evidence_appear_right.gif";
} }
pos_size_type icon_dimensions = ao_app->get_element_dimensions(icon_identifier, "courtroom_design.ini"); pos_size_type icon_dimensions =
ao_app->get_element_dimensions(icon_identifier, "courtroom_design.ini");
evidence_icon->move(icon_dimensions.x, icon_dimensions.y); evidence_icon->move(icon_dimensions.x, icon_dimensions.y);
evidence_icon->resize(icon_dimensions.width, icon_dimensions.height); evidence_icon->resize(icon_dimensions.width, icon_dimensions.height);
evidence_icon->setPixmap(f_pixmap.scaled(evidence_icon->width(), evidence_icon->height(), Qt::IgnoreAspectRatio)); evidence_icon->setPixmap(f_pixmap.scaled(
evidence_icon->width(), evidence_icon->height(), Qt::IgnoreAspectRatio));
QString f_default_gif_path = ao_app->get_default_theme_path(gif_name); QString f_default_gif_path = ao_app->get_default_theme_path(gif_name);
QString f_gif_path = ao_app->get_theme_path(gif_name); QString f_gif_path = ao_app->get_theme_path(gif_name);
@ -57,7 +60,7 @@ void AOEvidenceDisplay::show_evidence(QString p_evidence_image, bool is_left_sid
evidence_movie->setFileName(final_gif_path); evidence_movie->setFileName(final_gif_path);
if(evidence_movie->frameCount() < 1) if (evidence_movie->frameCount() < 1)
return; return;
this->setMovie(evidence_movie); this->setMovie(evidence_movie);
@ -68,9 +71,8 @@ void AOEvidenceDisplay::show_evidence(QString p_evidence_image, bool is_left_sid
void AOEvidenceDisplay::frame_change(int p_frame) void AOEvidenceDisplay::frame_change(int p_frame)
{ {
if (p_frame == (evidence_movie->frameCount() - 1)) if (p_frame == (evidence_movie->frameCount() - 1)) {
{ // we need this or else the last frame wont show
//we need this or else the last frame wont show
delay(evidence_movie->nextFrameDelay()); delay(evidence_movie->nextFrameDelay());
evidence_movie->stop(); evidence_movie->stop();
@ -88,9 +90,4 @@ void AOEvidenceDisplay::reset()
this->clear(); this->clear();
} }
QLabel* AOEvidenceDisplay::get_evidence_icon() QLabel *AOEvidenceDisplay::get_evidence_icon() { return evidence_icon; }
{
return evidence_icon;
}

View File

@ -8,10 +8,7 @@ AOImage::AOImage(QWidget *parent, AOApplication *p_ao_app) : QLabel(parent)
ao_app = p_ao_app; ao_app = p_ao_app;
} }
AOImage::~AOImage() AOImage::~AOImage() {}
{
}
void AOImage::set_image(QString p_image) void AOImage::set_image(QString p_image)
{ {
@ -27,7 +24,8 @@ void AOImage::set_image(QString p_image)
QPixmap f_pixmap(final_image_path); QPixmap f_pixmap(final_image_path);
this->setPixmap(f_pixmap.scaled(this->width(), this->height(), Qt::IgnoreAspectRatio)); this->setPixmap(
f_pixmap.scaled(this->width(), this->height(), Qt::IgnoreAspectRatio));
} }
void AOImage::set_image_from_path(QString p_path) void AOImage::set_image_from_path(QString p_path)
@ -43,5 +41,6 @@ void AOImage::set_image_from_path(QString p_path)
QPixmap f_pixmap(final_path); QPixmap f_pixmap(final_path);
this->setPixmap(f_pixmap.scaled(this->width(), this->height(), Qt::IgnoreAspectRatio)); this->setPixmap(
f_pixmap.scaled(this->width(), this->height(), Qt::IgnoreAspectRatio));
} }

View File

@ -15,7 +15,4 @@ void AOLineEdit::mouseDoubleClickEvent(QMouseEvent *e)
this->setReadOnly(false); this->setReadOnly(false);
} }
void AOLineEdit::on_enter_pressed() void AOLineEdit::on_enter_pressed() { this->setReadOnly(true); }
{
this->setReadOnly(true);
}

View File

@ -1,7 +1,7 @@
#include "aomovie.h" #include "aomovie.h"
#include "file_functions.h"
#include "courtroom.h" #include "courtroom.h"
#include "file_functions.h"
#include "misc_functions.h" #include "misc_functions.h"
AOMovie::AOMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent) AOMovie::AOMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent)
@ -15,10 +15,7 @@ AOMovie::AOMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent)
connect(m_movie, SIGNAL(frameChanged(int)), this, SLOT(frame_change(int))); connect(m_movie, SIGNAL(frameChanged(int)), this, SLOT(frame_change(int)));
} }
void AOMovie::set_play_once(bool p_play_once) void AOMovie::set_play_once(bool p_play_once) { play_once = p_play_once; }
{
play_once = p_play_once;
}
void AOMovie::play(QString p_gif, QString p_char, QString p_custom_theme) void AOMovie::play(QString p_gif, QString p_char, QString p_custom_theme)
{ {
@ -28,16 +25,21 @@ void AOMovie::play(QString p_gif, QString p_char, QString p_custom_theme)
QString custom_path; QString custom_path;
if (p_gif == "custom") if (p_gif == "custom")
custom_path = ao_app->get_image_suffix(ao_app->get_character_path(p_char, p_gif)); custom_path =
ao_app->get_image_suffix(ao_app->get_character_path(p_char, p_gif));
else else
custom_path = ao_app->get_image_suffix(ao_app->get_character_path(p_char, p_gif + "_bubble")); custom_path = ao_app->get_image_suffix(
ao_app->get_character_path(p_char, p_gif + "_bubble"));
QString misc_path = ao_app->get_base_path() + "misc/" + p_custom_theme + "/" + p_gif + "_bubble.gif"; QString misc_path = ao_app->get_base_path() + "misc/" + p_custom_theme + "/" +
QString custom_theme_path = ao_app->get_custom_theme_path(p_custom_theme, p_gif + ".gif"); p_gif + "_bubble.gif";
QString custom_theme_path =
ao_app->get_custom_theme_path(p_custom_theme, p_gif + ".gif");
QString theme_path = ao_app->get_theme_path(p_gif + ".gif"); QString theme_path = ao_app->get_theme_path(p_gif + ".gif");
QString default_theme_path = ao_app->get_default_theme_path(p_gif + ".gif"); QString default_theme_path = ao_app->get_default_theme_path(p_gif + ".gif");
QString placeholder_path = ao_app->get_theme_path("placeholder.gif"); QString placeholder_path = ao_app->get_theme_path("placeholder.gif");
QString default_placeholder_path = ao_app->get_default_theme_path("placeholder.gif"); QString default_placeholder_path =
ao_app->get_default_theme_path("placeholder.gif");
if (file_exists(custom_path)) if (file_exists(custom_path))
gif_path = custom_path; gif_path = custom_path;
@ -70,14 +72,13 @@ void AOMovie::stop()
void AOMovie::frame_change(int n_frame) void AOMovie::frame_change(int n_frame)
{ {
if (n_frame == (m_movie->frameCount() - 1) && play_once) if (n_frame == (m_movie->frameCount() - 1) && play_once) {
{ // we need this or else the last frame wont show
//we need this or else the last frame wont show
delay(m_movie->nextFrameDelay()); delay(m_movie->nextFrameDelay());
this->stop(); this->stop();
//signal connected to courtroom object, let it figure out what to do // signal connected to courtroom object, let it figure out what to do
done(); done();
} }
} }

View File

@ -7,10 +7,7 @@ AOMusicPlayer::AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app)
ao_app = p_ao_app; ao_app = p_ao_app;
} }
AOMusicPlayer::~AOMusicPlayer() AOMusicPlayer::~AOMusicPlayer() { BASS_ChannelStop(m_stream); }
{
BASS_ChannelStop(m_stream);
}
void AOMusicPlayer::play(QString p_song) void AOMusicPlayer::play(QString p_song)
{ {
@ -18,7 +15,9 @@ void AOMusicPlayer::play(QString p_song)
QString f_path = ao_app->get_music_path(p_song); QString f_path = ao_app->get_music_path(p_song);
m_stream = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_STREAM_AUTOFREE | BASS_UNICODE | BASS_ASYNCFILE); m_stream = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0,
BASS_STREAM_AUTOFREE | BASS_UNICODE |
BASS_ASYNCFILE);
this->set_volume(m_volume); this->set_volume(m_volume);
@ -40,10 +39,7 @@ AOMusicPlayer::AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app)
ao_app = p_ao_app; ao_app = p_ao_app;
} }
AOMusicPlayer::~AOMusicPlayer() AOMusicPlayer::~AOMusicPlayer() { m_player.stop(); }
{
m_player.stop();
}
void AOMusicPlayer::play(QString p_song) void AOMusicPlayer::play(QString p_song)
{ {
@ -70,18 +66,9 @@ AOMusicPlayer::AOMusicPlayer(QWidget *parent, AOApplication *p_ao_app)
ao_app = p_ao_app; ao_app = p_ao_app;
} }
AOMusicPlayer::~AOMusicPlayer() AOMusicPlayer::~AOMusicPlayer() {}
{
} void AOMusicPlayer::play(QString p_song) {}
void AOMusicPlayer::play(QString p_song) void AOMusicPlayer::set_volume(int p_value) {}
{
}
void AOMusicPlayer::set_volume(int p_value)
{
}
#endif #endif

View File

@ -2,7 +2,8 @@
#include "aoapplication.h" #include "aoapplication.h"
#include "bass.h" #include "bass.h"
AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDialog(parent) AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app)
: QDialog(parent)
{ {
ao_app = p_ao_app; ao_app = p_ao_app;
@ -16,13 +17,17 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Fixed); QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Fixed);
sizePolicy1.setHorizontalStretch(0); sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(ui_settings_buttons->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(
ui_settings_buttons->sizePolicy().hasHeightForWidth());
ui_settings_buttons->setSizePolicy(sizePolicy1); ui_settings_buttons->setSizePolicy(sizePolicy1);
ui_settings_buttons->setOrientation(Qt::Horizontal); ui_settings_buttons->setOrientation(Qt::Horizontal);
ui_settings_buttons->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Save); ui_settings_buttons->setStandardButtons(QDialogButtonBox::Cancel |
QDialogButtonBox::Save);
QObject::connect(ui_settings_buttons, SIGNAL(accepted()), this, SLOT(save_pressed())); QObject::connect(ui_settings_buttons, SIGNAL(accepted()), this,
QObject::connect(ui_settings_buttons, SIGNAL(rejected()), this, SLOT(discard_pressed())); SLOT(save_pressed()));
QObject::connect(ui_settings_buttons, SIGNAL(rejected()), this,
SLOT(discard_pressed()));
// We'll stop updates so that the window won't flicker while it's being made. // We'll stop updates so that the window won't flicker while it's being made.
setUpdatesEnabled(false); setUpdatesEnabled(false);
@ -43,13 +48,16 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_form_layout_widget->setGeometry(QRect(10, 10, 361, 211)); ui_form_layout_widget->setGeometry(QRect(10, 10, 361, 211));
ui_gameplay_form = new QFormLayout(ui_form_layout_widget); ui_gameplay_form = new QFormLayout(ui_form_layout_widget);
ui_gameplay_form->setLabelAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter); ui_gameplay_form->setLabelAlignment(Qt::AlignLeading | Qt::AlignLeft |
ui_gameplay_form->setFormAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop); Qt::AlignVCenter);
ui_gameplay_form->setFormAlignment(Qt::AlignLeading | Qt::AlignLeft |
Qt::AlignTop);
ui_gameplay_form->setContentsMargins(0, 0, 0, 0); ui_gameplay_form->setContentsMargins(0, 0, 0, 0);
ui_theme_label = new QLabel(ui_form_layout_widget); ui_theme_label = new QLabel(ui_form_layout_widget);
ui_theme_label->setText(tr("Theme:")); ui_theme_label->setText(tr("Theme:"));
ui_theme_label->setToolTip(tr("Sets the theme used in-game. If the new theme changes " ui_theme_label->setToolTip(
tr("Sets the theme used in-game. If the new theme changes "
"the lobby's look as well, you'll need to reload the " "the lobby's look as well, you'll need to reload the "
"lobby for the changes to take effect, such as by joining " "lobby for the changes to take effect, such as by joining "
"a server and leaving it.")); "a server and leaving it."));
@ -58,14 +66,14 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_theme_combobox = new QComboBox(ui_form_layout_widget); ui_theme_combobox = new QComboBox(ui_form_layout_widget);
// Fill the combobox with the names of the themes. // Fill the combobox with the names of the themes.
QDirIterator it(p_ao_app->get_base_path() + "themes", QDir::Dirs, QDirIterator::NoIteratorFlags); QDirIterator it(p_ao_app->get_base_path() + "themes", QDir::Dirs,
while (it.hasNext()) QDirIterator::NoIteratorFlags);
{ while (it.hasNext()) {
QString actualname = QDir(it.next()).dirName(); QString actualname = QDir(it.next()).dirName();
if (actualname != "." && actualname != "..") if (actualname != "." && actualname != "..")
ui_theme_combobox->addItem(actualname); ui_theme_combobox->addItem(actualname);
if (actualname == p_ao_app->read_theme()) if (actualname == p_ao_app->read_theme())
ui_theme_combobox->setCurrentIndex(ui_theme_combobox->count()-1); ui_theme_combobox->setCurrentIndex(ui_theme_combobox->count() - 1);
} }
ui_gameplay_form->setWidget(0, QFormLayout::FieldRole, ui_theme_combobox); ui_gameplay_form->setWidget(0, QFormLayout::FieldRole, ui_theme_combobox);
@ -79,7 +87,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_downwards_lbl = new QLabel(ui_form_layout_widget); ui_downwards_lbl = new QLabel(ui_form_layout_widget);
ui_downwards_lbl->setText(tr("Log goes downwards:")); ui_downwards_lbl->setText(tr("Log goes downwards:"));
ui_downwards_lbl->setToolTip(tr("If ticked, new messages will appear at " ui_downwards_lbl->setToolTip(
tr("If ticked, new messages will appear at "
"the bottom (like the OOC chatlog). The traditional " "the bottom (like the OOC chatlog). The traditional "
"(AO1) behaviour is equivalent to this being unticked.")); "(AO1) behaviour is equivalent to this being unticked."));
@ -92,7 +101,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_length_lbl = new QLabel(ui_form_layout_widget); ui_length_lbl = new QLabel(ui_form_layout_widget);
ui_length_lbl->setText(tr("Log length:")); ui_length_lbl->setText(tr("Log length:"));
ui_length_lbl->setToolTip(tr("The amount of messages the IC chatlog will keep before " ui_length_lbl->setToolTip(tr(
"The amount of messages the IC chatlog will keep before "
"deleting older messages. A value of 0 or below counts as 'infinite'.")); "deleting older messages. A value of 0 or below counts as 'infinite'."));
ui_gameplay_form->setWidget(3, QFormLayout::LabelRole, ui_length_lbl); ui_gameplay_form->setWidget(3, QFormLayout::LabelRole, ui_length_lbl);
@ -111,7 +121,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_username_lbl = new QLabel(ui_form_layout_widget); ui_username_lbl = new QLabel(ui_form_layout_widget);
ui_username_lbl->setText(tr("Default username:")); ui_username_lbl->setText(tr("Default username:"));
ui_username_lbl->setToolTip(tr("Your OOC name will be automatically set to this value " ui_username_lbl->setToolTip(
tr("Your OOC name will be automatically set to this value "
"when you join a server.")); "when you join a server."));
ui_gameplay_form->setWidget(5, QFormLayout::LabelRole, ui_username_lbl); ui_gameplay_form->setWidget(5, QFormLayout::LabelRole, ui_username_lbl);
@ -124,7 +135,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_showname_lbl = new QLabel(ui_form_layout_widget); ui_showname_lbl = new QLabel(ui_form_layout_widget);
ui_showname_lbl->setText(tr("Custom shownames:")); ui_showname_lbl->setText(tr("Custom shownames:"));
ui_showname_lbl->setToolTip(tr("Gives the default value for the in-game 'Custom shownames' " ui_showname_lbl->setToolTip(
tr("Gives the default value for the in-game 'Custom shownames' "
"tickbox, which in turn determines whether the client should " "tickbox, which in turn determines whether the client should "
"display custom in-character names.")); "display custom in-character names."));
@ -143,12 +155,13 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_ms_lbl = new QLabel(ui_form_layout_widget); ui_ms_lbl = new QLabel(ui_form_layout_widget);
ui_ms_lbl->setText(tr("Backup MS:")); ui_ms_lbl->setText(tr("Backup MS:"));
ui_ms_lbl->setToolTip(tr("If the built-in server lookups fail, the game will try the " ui_ms_lbl->setToolTip(
tr("If the built-in server lookups fail, the game will try the "
"address given here and use it as a backup master server address.")); "address given here and use it as a backup master server address."));
ui_gameplay_form->setWidget(8, QFormLayout::LabelRole, ui_ms_lbl); ui_gameplay_form->setWidget(8, QFormLayout::LabelRole, ui_ms_lbl);
QSettings* configini = ao_app->configini; QSettings *configini = ao_app->configini;
ui_ms_textbox = new QLineEdit(ui_form_layout_widget); ui_ms_textbox = new QLineEdit(ui_form_layout_widget);
ui_ms_textbox->setText(configini->value("master", "").value<QString>()); ui_ms_textbox->setText(configini->value("master", "").value<QString>());
@ -156,7 +169,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_discord_lbl = new QLabel(ui_form_layout_widget); ui_discord_lbl = new QLabel(ui_form_layout_widget);
ui_discord_lbl->setText(tr("Discord:")); ui_discord_lbl->setText(tr("Discord:"));
ui_discord_lbl->setToolTip(tr("Allows others on Discord to see what server you are in, " ui_discord_lbl->setToolTip(
tr("Allows others on Discord to see what server you are in, "
"what character are you playing, and how long you have " "what character are you playing, and how long you have "
"been playing for.")); "been playing for."));
@ -175,13 +189,14 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_callwords_widget->setGeometry(QRect(10, 10, 361, 211)); ui_callwords_widget->setGeometry(QRect(10, 10, 361, 211));
ui_callwords_layout = new QVBoxLayout(ui_callwords_widget); ui_callwords_layout = new QVBoxLayout(ui_callwords_widget);
ui_callwords_layout->setContentsMargins(0,0,0,0); ui_callwords_layout->setContentsMargins(0, 0, 0, 0);
ui_callwords_textbox = new QPlainTextEdit(ui_callwords_widget); ui_callwords_textbox = new QPlainTextEdit(ui_callwords_widget);
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy.setHorizontalStretch(0); sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0); sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(ui_callwords_textbox->sizePolicy().hasHeightForWidth()); sizePolicy.setHeightForWidth(
ui_callwords_textbox->sizePolicy().hasHeightForWidth());
ui_callwords_textbox->setSizePolicy(sizePolicy); ui_callwords_textbox->setSizePolicy(sizePolicy);
// Let's fill the callwords text edit with the already present callwords. // Let's fill the callwords text edit with the already present callwords.
@ -194,12 +209,17 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_callwords_explain_lbl = new QLabel(ui_callwords_widget); ui_callwords_explain_lbl = new QLabel(ui_callwords_widget);
ui_callwords_explain_lbl->setWordWrap(true); ui_callwords_explain_lbl->setWordWrap(true);
ui_callwords_explain_lbl->setText(tr("<html><head/><body>Enter as many callwords as you would like. These are case insensitive. Make sure to leave every callword in its own line!<br>Do not leave a line with a space at the end -- you will be alerted everytime someone uses a space in their messages.</body></html>")); ui_callwords_explain_lbl->setText(
tr("<html><head/><body>Enter as many callwords as you would like. These "
"are case insensitive. Make sure to leave every callword in its own "
"line!<br>Do not leave a line with a space at the end -- you will be "
"alerted everytime someone uses a space in their "
"messages.</body></html>"));
ui_callwords_layout->addWidget(ui_callwords_explain_lbl); ui_callwords_layout->addWidget(ui_callwords_explain_lbl);
// The audio tab. // The audio tab.
#ifdef BASSAUDIO #ifdef BASSAUDIO
ui_audio_tab = new QWidget(); ui_audio_tab = new QWidget();
ui_settings_tabs->addTab(ui_audio_tab, tr("Audio")); ui_settings_tabs->addTab(ui_audio_tab, tr("Audio"));
@ -207,8 +227,10 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_audio_widget->setGeometry(QRect(10, 10, 361, 211)); ui_audio_widget->setGeometry(QRect(10, 10, 361, 211));
ui_audio_layout = new QFormLayout(ui_audio_widget); ui_audio_layout = new QFormLayout(ui_audio_widget);
ui_audio_layout->setLabelAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter); ui_audio_layout->setLabelAlignment(Qt::AlignLeading | Qt::AlignLeft |
ui_audio_layout->setFormAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop); Qt::AlignVCenter);
ui_audio_layout->setFormAlignment(Qt::AlignLeading | Qt::AlignLeft |
Qt::AlignTop);
ui_audio_layout->setContentsMargins(0, 0, 0, 0); ui_audio_layout->setContentsMargins(0, 0, 0, 0);
ui_audio_device_lbl = new QLabel(ui_audio_widget); ui_audio_device_lbl = new QLabel(ui_audio_widget);
@ -219,29 +241,31 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_audio_device_combobox = new QComboBox(ui_audio_widget); ui_audio_device_combobox = new QComboBox(ui_audio_widget);
// Let's fill out the combobox with the available audio devices. Or don't if there is no audio // Let's fill out the combobox with the available audio devices. Or don't if
// there is no audio
int a = 0; int a = 0;
BASS_DEVICEINFO info; BASS_DEVICEINFO info;
if (needs_default_audiodev()) if (needs_default_audiodev()) {
{
ui_audio_device_combobox->addItem("default"); ui_audio_device_combobox->addItem("default");
} }
for (a = 0; BASS_GetDeviceInfo(a, &info); a++) for (a = 0; BASS_GetDeviceInfo(a, &info); a++) {
{
ui_audio_device_combobox->addItem(info.name); ui_audio_device_combobox->addItem(info.name);
if (p_ao_app->get_audio_output_device() == info.name) if (p_ao_app->get_audio_output_device() == info.name)
ui_audio_device_combobox->setCurrentIndex(ui_audio_device_combobox->count()-1); ui_audio_device_combobox->setCurrentIndex(
ui_audio_device_combobox->count() - 1);
} }
ui_audio_layout->setWidget(0, QFormLayout::FieldRole, ui_audio_device_combobox); ui_audio_layout->setWidget(0, QFormLayout::FieldRole,
ui_audio_device_combobox);
ui_audio_volume_divider = new QFrame(ui_audio_widget); ui_audio_volume_divider = new QFrame(ui_audio_widget);
ui_audio_volume_divider->setFrameShape(QFrame::HLine); ui_audio_volume_divider->setFrameShape(QFrame::HLine);
ui_audio_volume_divider->setFrameShadow(QFrame::Sunken); ui_audio_volume_divider->setFrameShadow(QFrame::Sunken);
ui_audio_layout->setWidget(1, QFormLayout::FieldRole, ui_audio_volume_divider); ui_audio_layout->setWidget(1, QFormLayout::FieldRole,
ui_audio_volume_divider);
ui_music_volume_lbl = new QLabel(ui_audio_widget); ui_music_volume_lbl = new QLabel(ui_audio_widget);
ui_music_volume_lbl->setText(tr("Music:")); ui_music_volume_lbl->setText(tr("Music:"));
@ -254,11 +278,13 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_music_volume_spinbox->setMaximum(100); ui_music_volume_spinbox->setMaximum(100);
ui_music_volume_spinbox->setSuffix("%"); ui_music_volume_spinbox->setSuffix("%");
ui_audio_layout->setWidget(2, QFormLayout::FieldRole, ui_music_volume_spinbox); ui_audio_layout->setWidget(2, QFormLayout::FieldRole,
ui_music_volume_spinbox);
ui_sfx_volume_lbl = new QLabel(ui_audio_widget); ui_sfx_volume_lbl = new QLabel(ui_audio_widget);
ui_sfx_volume_lbl->setText(tr("SFX:")); ui_sfx_volume_lbl->setText(tr("SFX:"));
ui_sfx_volume_lbl->setToolTip(tr("Sets the SFX's default volume. " ui_sfx_volume_lbl->setToolTip(
tr("Sets the SFX's default volume. "
"Interjections and actual sound effects count as 'SFX'.")); "Interjections and actual sound effects count as 'SFX'."));
ui_audio_layout->setWidget(3, QFormLayout::LabelRole, ui_sfx_volume_lbl); ui_audio_layout->setWidget(3, QFormLayout::LabelRole, ui_sfx_volume_lbl);
@ -272,7 +298,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_blips_volume_lbl = new QLabel(ui_audio_widget); ui_blips_volume_lbl = new QLabel(ui_audio_widget);
ui_blips_volume_lbl->setText(tr("Blips:")); ui_blips_volume_lbl->setText(tr("Blips:"));
ui_blips_volume_lbl->setToolTip(tr("Sets the volume of the blips, the talking sound effects.")); ui_blips_volume_lbl->setToolTip(
tr("Sets the volume of the blips, the talking sound effects."));
ui_audio_layout->setWidget(4, QFormLayout::LabelRole, ui_blips_volume_lbl); ui_audio_layout->setWidget(4, QFormLayout::LabelRole, ui_blips_volume_lbl);
@ -281,7 +308,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_blips_volume_spinbox->setMaximum(100); ui_blips_volume_spinbox->setMaximum(100);
ui_blips_volume_spinbox->setSuffix("%"); ui_blips_volume_spinbox->setSuffix("%");
ui_audio_layout->setWidget(4, QFormLayout::FieldRole, ui_blips_volume_spinbox); ui_audio_layout->setWidget(4, QFormLayout::FieldRole,
ui_blips_volume_spinbox);
ui_volume_blip_divider = new QFrame(ui_audio_widget); ui_volume_blip_divider = new QFrame(ui_audio_widget);
ui_volume_blip_divider->setFrameShape(QFrame::HLine); ui_volume_blip_divider->setFrameShape(QFrame::HLine);
@ -291,7 +319,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_bliprate_lbl = new QLabel(ui_audio_widget); ui_bliprate_lbl = new QLabel(ui_audio_widget);
ui_bliprate_lbl->setText(tr("Blip rate:")); ui_bliprate_lbl->setText(tr("Blip rate:"));
ui_bliprate_lbl->setToolTip(tr("Sets the delay between playing the blip sounds.")); ui_bliprate_lbl->setToolTip(
tr("Sets the delay between playing the blip sounds."));
ui_audio_layout->setWidget(6, QFormLayout::LabelRole, ui_bliprate_lbl); ui_audio_layout->setWidget(6, QFormLayout::LabelRole, ui_bliprate_lbl);
@ -303,7 +332,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_blank_blips_lbl = new QLabel(ui_audio_widget); ui_blank_blips_lbl = new QLabel(ui_audio_widget);
ui_blank_blips_lbl->setText(tr("Blank blips:")); ui_blank_blips_lbl->setText(tr("Blank blips:"));
ui_blank_blips_lbl->setToolTip(tr("If true, the game will play a blip sound even " ui_blank_blips_lbl->setToolTip(
tr("If true, the game will play a blip sound even "
"when a space is 'being said'.")); "when a space is 'being said'."));
ui_audio_layout->setWidget(7, QFormLayout::LabelRole, ui_blank_blips_lbl); ui_audio_layout->setWidget(7, QFormLayout::LabelRole, ui_blank_blips_lbl);
@ -312,18 +342,20 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_blank_blips_cb->setChecked(p_ao_app->get_blank_blip()); ui_blank_blips_cb->setChecked(p_ao_app->get_blank_blip());
ui_audio_layout->setWidget(7, QFormLayout::FieldRole, ui_blank_blips_cb); ui_audio_layout->setWidget(7, QFormLayout::FieldRole, ui_blank_blips_cb);
#endif #endif
// The casing tab! // The casing tab!
ui_casing_tab = new QWidget(); ui_casing_tab = new QWidget();
ui_settings_tabs->addTab(ui_casing_tab, tr("Casing")); ui_settings_tabs->addTab(ui_casing_tab, tr("Casing"));
ui_casing_widget = new QWidget(ui_casing_tab); ui_casing_widget = new QWidget(ui_casing_tab);
ui_casing_widget->setGeometry(QRect(10,10, 361, 211)); ui_casing_widget->setGeometry(QRect(10, 10, 361, 211));
ui_casing_layout = new QFormLayout(ui_casing_widget); ui_casing_layout = new QFormLayout(ui_casing_widget);
ui_casing_layout->setLabelAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter); ui_casing_layout->setLabelAlignment(Qt::AlignLeading | Qt::AlignLeft |
ui_casing_layout->setFormAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop); Qt::AlignVCenter);
ui_casing_layout->setFormAlignment(Qt::AlignLeading | Qt::AlignLeft |
Qt::AlignTop);
ui_casing_layout->setContentsMargins(0, 0, 0, 0); ui_casing_layout->setContentsMargins(0, 0, 0, 0);
// -- SERVER SUPPORTS CASING // -- SERVER SUPPORTS CASING
@ -332,16 +364,19 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
if (ao_app->casing_alerts_enabled) if (ao_app->casing_alerts_enabled)
ui_casing_supported_lbl->setText(tr("This server supports case alerts.")); ui_casing_supported_lbl->setText(tr("This server supports case alerts."));
else else
ui_casing_supported_lbl->setText(tr("This server does not support case alerts.")); ui_casing_supported_lbl->setText(
tr("This server does not support case alerts."));
ui_casing_supported_lbl->setToolTip(tr("Pretty self-explanatory.")); ui_casing_supported_lbl->setToolTip(tr("Pretty self-explanatory."));
ui_casing_layout->setWidget(0, QFormLayout::FieldRole, ui_casing_supported_lbl); ui_casing_layout->setWidget(0, QFormLayout::FieldRole,
ui_casing_supported_lbl);
// -- CASE ANNOUNCEMENTS // -- CASE ANNOUNCEMENTS
ui_casing_enabled_lbl = new QLabel(ui_casing_widget); ui_casing_enabled_lbl = new QLabel(ui_casing_widget);
ui_casing_enabled_lbl->setText(tr("Casing:")); ui_casing_enabled_lbl->setText(tr("Casing:"));
ui_casing_enabled_lbl->setToolTip(tr("If checked, you will get alerts about case " ui_casing_enabled_lbl->setToolTip(
tr("If checked, you will get alerts about case "
"announcements.")); "announcements."));
ui_casing_layout->setWidget(1, QFormLayout::LabelRole, ui_casing_enabled_lbl); ui_casing_layout->setWidget(1, QFormLayout::LabelRole, ui_casing_enabled_lbl);
@ -369,7 +404,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_casing_pro_lbl = new QLabel(ui_casing_widget); ui_casing_pro_lbl = new QLabel(ui_casing_widget);
ui_casing_pro_lbl->setText(tr("Prosecution:")); ui_casing_pro_lbl->setText(tr("Prosecution:"));
ui_casing_pro_lbl->setToolTip(tr("If checked, you will get alerts about case " ui_casing_pro_lbl->setToolTip(
tr("If checked, you will get alerts about case "
"announcements if a prosecutor spot is open.")); "announcements if a prosecutor spot is open."));
ui_casing_layout->setWidget(3, QFormLayout::LabelRole, ui_casing_pro_lbl); ui_casing_layout->setWidget(3, QFormLayout::LabelRole, ui_casing_pro_lbl);
@ -411,7 +447,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_casing_steno_lbl = new QLabel(ui_casing_widget); ui_casing_steno_lbl = new QLabel(ui_casing_widget);
ui_casing_steno_lbl->setText(tr("Stenographer:")); ui_casing_steno_lbl->setText(tr("Stenographer:"));
ui_casing_steno_lbl->setToolTip(tr("If checked, you will get alerts about case " ui_casing_steno_lbl->setToolTip(
tr("If checked, you will get alerts about case "
"announcements if a stenographer spot is open.")); "announcements if a stenographer spot is open."));
ui_casing_layout->setWidget(6, QFormLayout::LabelRole, ui_casing_steno_lbl); ui_casing_layout->setWidget(6, QFormLayout::LabelRole, ui_casing_steno_lbl);
@ -425,7 +462,8 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_casing_cm_lbl = new QLabel(ui_casing_widget); ui_casing_cm_lbl = new QLabel(ui_casing_widget);
ui_casing_cm_lbl->setText(tr("CM:")); ui_casing_cm_lbl->setText(tr("CM:"));
ui_casing_cm_lbl->setToolTip(tr("If checked, you will appear amongst the potential " ui_casing_cm_lbl->setToolTip(
tr("If checked, you will appear amongst the potential "
"CMs on the server.")); "CMs on the server."));
ui_casing_layout->setWidget(7, QFormLayout::LabelRole, ui_casing_cm_lbl); ui_casing_layout->setWidget(7, QFormLayout::LabelRole, ui_casing_cm_lbl);
@ -439,15 +477,18 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
ui_casing_cm_cases_lbl = new QLabel(ui_casing_widget); ui_casing_cm_cases_lbl = new QLabel(ui_casing_widget);
ui_casing_cm_cases_lbl->setText(tr("Hosting cases:")); ui_casing_cm_cases_lbl->setText(tr("Hosting cases:"));
ui_casing_cm_cases_lbl->setToolTip(tr("If you're a CM, enter what cases you are " ui_casing_cm_cases_lbl->setToolTip(
tr("If you're a CM, enter what cases you are "
"willing to host.")); "willing to host."));
ui_casing_layout->setWidget(8, QFormLayout::LabelRole, ui_casing_cm_cases_lbl); ui_casing_layout->setWidget(8, QFormLayout::LabelRole,
ui_casing_cm_cases_lbl);
ui_casing_cm_cases_textbox = new QLineEdit(ui_casing_widget); ui_casing_cm_cases_textbox = new QLineEdit(ui_casing_widget);
ui_casing_cm_cases_textbox->setText(ao_app->get_casing_can_host_cases()); ui_casing_cm_cases_textbox->setText(ao_app->get_casing_can_host_cases());
ui_casing_layout->setWidget(8, QFormLayout::FieldRole, ui_casing_cm_cases_textbox); ui_casing_layout->setWidget(8, QFormLayout::FieldRole,
ui_casing_cm_cases_textbox);
// When we're done, we should continue the updates! // When we're done, we should continue the updates!
setUpdatesEnabled(true); setUpdatesEnabled(true);
@ -456,7 +497,7 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app) : QDi
void AOOptionsDialog::save_pressed() void AOOptionsDialog::save_pressed()
{ {
// Save everything into the config.ini. // Save everything into the config.ini.
QSettings* configini = ao_app->configini; QSettings *configini = ao_app->configini;
configini->setValue("theme", ui_theme_combobox->currentText()); configini->setValue("theme", ui_theme_combobox->currentText());
configini->setValue("log_goes_downwards", ui_downwards_cb->isChecked()); configini->setValue("log_goes_downwards", ui_downwards_cb->isChecked());
@ -466,20 +507,20 @@ void AOOptionsDialog::save_pressed()
configini->setValue("master", ui_ms_textbox->text()); configini->setValue("master", ui_ms_textbox->text());
configini->setValue("discord", ui_discord_cb->isChecked()); configini->setValue("discord", ui_discord_cb->isChecked());
QFile* callwordsini = new QFile(ao_app->get_base_path() + "callwords.ini"); QFile *callwordsini = new QFile(ao_app->get_base_path() + "callwords.ini");
if (!callwordsini->open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) if (!callwordsini->open(QIODevice::WriteOnly | QIODevice::Truncate |
{ QIODevice::Text)) {
// Nevermind! // Nevermind!
} }
else else {
{
QTextStream out(callwordsini); QTextStream out(callwordsini);
out << ui_callwords_textbox->toPlainText(); out << ui_callwords_textbox->toPlainText();
callwordsini->close(); callwordsini->close();
} }
configini->setValue("default_audio_device", ui_audio_device_combobox->currentText()); configini->setValue("default_audio_device",
ui_audio_device_combobox->currentText());
configini->setValue("default_music", ui_music_volume_spinbox->value()); configini->setValue("default_music", ui_music_volume_spinbox->value());
configini->setValue("default_sfx", ui_sfx_volume_spinbox->value()); configini->setValue("default_sfx", ui_sfx_volume_spinbox->value());
configini->setValue("default_blip", ui_blips_volume_spinbox->value()); configini->setValue("default_blip", ui_blips_volume_spinbox->value());
@ -488,37 +529,27 @@ void AOOptionsDialog::save_pressed()
configini->setValue("casing_enabled", ui_casing_enabled_cb->isChecked()); configini->setValue("casing_enabled", ui_casing_enabled_cb->isChecked());
configini->setValue("casing_defence_enabled", ui_casing_def_cb->isChecked()); configini->setValue("casing_defence_enabled", ui_casing_def_cb->isChecked());
configini->setValue("casing_prosecution_enabled", ui_casing_pro_cb->isChecked()); configini->setValue("casing_prosecution_enabled",
ui_casing_pro_cb->isChecked());
configini->setValue("casing_judge_enabled", ui_casing_jud_cb->isChecked()); configini->setValue("casing_judge_enabled", ui_casing_jud_cb->isChecked());
configini->setValue("casing_juror_enabled", ui_casing_jur_cb->isChecked()); configini->setValue("casing_juror_enabled", ui_casing_jur_cb->isChecked());
configini->setValue("casing_steno_enabled", ui_casing_steno_cb->isChecked()); configini->setValue("casing_steno_enabled", ui_casing_steno_cb->isChecked());
configini->setValue("casing_cm_enabled", ui_casing_cm_cb->isChecked()); configini->setValue("casing_cm_enabled", ui_casing_cm_cb->isChecked());
configini->setValue("casing_can_host_cases", ui_casing_cm_cases_textbox->text()); configini->setValue("casing_can_host_cases",
ui_casing_cm_cases_textbox->text());
callwordsini->close(); callwordsini->close();
done(0); done(0);
} }
void AOOptionsDialog::discard_pressed() void AOOptionsDialog::discard_pressed() { done(0); }
{
done(0);
}
#if (defined (_WIN32) || defined (_WIN64)) #if (defined(_WIN32) || defined(_WIN64))
bool AOOptionsDialog::needs_default_audiodev() bool AOOptionsDialog::needs_default_audiodev() { return true; }
{ #elif (defined(LINUX) || defined(__linux__))
return true; bool AOOptionsDialog::needs_default_audiodev() { return false; }
}
#elif (defined (LINUX) || defined (__linux__))
bool AOOptionsDialog::needs_default_audiodev()
{
return false;
}
#elif defined __APPLE__ #elif defined __APPLE__
bool AOOptionsDialog::needs_default_audiodev() bool AOOptionsDialog::needs_default_audiodev() { return true; }
{
return true;
}
#else #else
#error This operating system is not supported. #error This operating system is not supported.
#endif #endif

View File

@ -8,8 +8,7 @@ AOPacket::AOPacket(QString p_packet_string)
m_header = packet_contents.at(0); m_header = packet_contents.at(0);
for(int n_string = 1 ; n_string < packet_contents.size() - 1 ; ++n_string) for (int n_string = 1; n_string < packet_contents.size() - 1; ++n_string) {
{
m_contents.append(packet_contents.at(n_string)); m_contents.append(packet_contents.at(n_string));
} }
} }
@ -20,23 +19,18 @@ AOPacket::AOPacket(QString p_header, QStringList &p_contents)
m_contents = p_contents; m_contents = p_contents;
} }
AOPacket::~AOPacket() AOPacket::~AOPacket() {}
{
}
QString AOPacket::to_string() QString AOPacket::to_string()
{ {
QString f_string = m_header; QString f_string = m_header;
for (QString i_string : m_contents) for (QString i_string : m_contents) {
{
f_string += ("#" + i_string); f_string += ("#" + i_string);
} }
f_string += "#%"; f_string += "#%";
if (encrypted) if (encrypted)
return "#" + f_string; return "#" + f_string;
else else
@ -59,10 +53,12 @@ void AOPacket::decrypt_header(unsigned int p_key)
void AOPacket::net_encode() void AOPacket::net_encode()
{ {
for (int n_element = 0 ; n_element < m_contents.size() ; ++n_element) for (int n_element = 0; n_element < m_contents.size(); ++n_element) {
{
QString f_element = m_contents.at(n_element); QString f_element = m_contents.at(n_element);
f_element.replace("#", "<num>").replace("%", "<percent>").replace("$", "<dollar>").replace("&", "<and>"); f_element.replace("#", "<num>")
.replace("%", "<percent>")
.replace("$", "<dollar>")
.replace("&", "<and>");
m_contents.removeAt(n_element); m_contents.removeAt(n_element);
m_contents.insert(n_element, f_element); m_contents.insert(n_element, f_element);
@ -71,13 +67,14 @@ void AOPacket::net_encode()
void AOPacket::net_decode() void AOPacket::net_decode()
{ {
for (int n_element = 0 ; n_element < m_contents.size() ; ++n_element) for (int n_element = 0; n_element < m_contents.size(); ++n_element) {
{
QString f_element = m_contents.at(n_element); QString f_element = m_contents.at(n_element);
f_element.replace("<num>", "#").replace("<percent>", "%").replace("<dollar>", "$").replace("<and>", "&"); f_element.replace("<num>", "#")
.replace("<percent>", "%")
.replace("<dollar>", "$")
.replace("<and>", "&");
m_contents.removeAt(n_element); m_contents.removeAt(n_element);
m_contents.insert(n_element, f_element); m_contents.insert(n_element, f_element);
} }
} }

View File

@ -12,7 +12,8 @@ AOScene::AOScene(QWidget *parent, AOApplication *p_ao_app) : QLabel(parent)
void AOScene::set_image(QString p_image) void AOScene::set_image(QString p_image)
{ {
QString background_path = ao_app->get_background_path(p_image + ".png"); QString background_path = ao_app->get_background_path(p_image + ".png");
QString animated_background_path = ao_app->get_background_path(p_image + ".gif"); QString animated_background_path =
ao_app->get_background_path(p_image + ".gif");
QString default_path = ao_app->get_default_background_path(p_image + ".png"); QString default_path = ao_app->get_default_background_path(p_image + ".png");
QPixmap background(background_path); QPixmap background(background_path);
@ -28,25 +29,22 @@ void AOScene::set_image(QString p_image)
m_movie->setFileName(animated_background_path); m_movie->setFileName(animated_background_path);
m_movie->setScaledSize(QSize(w, h)); m_movie->setScaledSize(QSize(w, h));
if (m_movie->isValid()) if (m_movie->isValid()) {
{
this->setMovie(m_movie); this->setMovie(m_movie);
m_movie->start(); m_movie->start();
} }
else if (file_exists(background_path)) else if (file_exists(background_path)) {
{
this->setPixmap(background.scaled(w, h)); this->setPixmap(background.scaled(w, h));
} }
else else {
{
this->setPixmap(default_bg.scaled(w, h)); this->setPixmap(default_bg.scaled(w, h));
} }
} }
void AOScene::set_legacy_desk(QString p_image) void AOScene::set_legacy_desk(QString p_image)
{ {
//vanilla desks vary in both width and height. in order to make that work with viewport rescaling, // vanilla desks vary in both width and height. in order to make that work
//some INTENSE math is needed. // with viewport rescaling, some INTENSE math is needed.
QString desk_path = ao_app->get_background_path(p_image); QString desk_path = ao_app->get_background_path(p_image);
QString default_path = ao_app->get_default_background_path(p_image); QString default_path = ao_app->get_default_background_path(p_image);
@ -61,16 +59,16 @@ void AOScene::set_legacy_desk(QString p_image)
int vp_width = m_parent->width(); int vp_width = m_parent->width();
int vp_height = m_parent->height(); int vp_height = m_parent->height();
//double y_modifier = 147 / 192; // double y_modifier = 147 / 192;
//double w_modifier = vp_width / 256; // double w_modifier = vp_width / 256;
double h_modifier = vp_height / 192; double h_modifier = vp_height / 192;
//int final_y = y_modifier * vp_height; // int final_y = y_modifier * vp_height;
//int final_w = w_modifier * f_desk.width(); // int final_w = w_modifier * f_desk.width();
int final_h = static_cast<int>(h_modifier * f_desk.height()); int final_h = static_cast<int>(h_modifier * f_desk.height());
//this->resize(final_w, final_h); // this->resize(final_w, final_h);
//this->setPixmap(f_desk.scaled(final_w, final_h)); // this->setPixmap(f_desk.scaled(final_w, final_h));
this->resize(vp_width, final_h); this->resize(vp_width, final_h);
this->setPixmap(f_desk.scaled(vp_width, final_h)); this->setPixmap(f_desk.scaled(vp_width, final_h));
} }

View File

@ -1,7 +1,7 @@
#include "aosfxplayer.h" #include "aosfxplayer.h"
#include "file_functions.h" #include "file_functions.h"
#if defined(BASSAUDIO) //Using bass.dll for sfx #if defined(BASSAUDIO) // Using bass.dll for sfx
AOSfxPlayer::AOSfxPlayer(QWidget *parent, AOApplication *p_ao_app) AOSfxPlayer::AOSfxPlayer(QWidget *parent, AOApplication *p_ao_app)
{ {
m_parent = parent; m_parent = parent;
@ -30,7 +30,9 @@ void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout)
else else
f_path = sound_path; f_path = sound_path;
m_stream = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0, BASS_STREAM_AUTOFREE | BASS_UNICODE | BASS_ASYNCFILE); m_stream = BASS_StreamCreateFile(FALSE, f_path.utf16(), 0, 0,
BASS_STREAM_AUTOFREE | BASS_UNICODE |
BASS_ASYNCFILE);
set_volume(m_volume); set_volume(m_volume);
@ -39,10 +41,7 @@ void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout)
BASS_ChannelPlay(m_stream, false); BASS_ChannelPlay(m_stream, false);
} }
void AOSfxPlayer::stop() void AOSfxPlayer::stop() { BASS_ChannelStop(m_stream); }
{
BASS_ChannelStop(m_stream);
}
void AOSfxPlayer::set_volume(int p_value) void AOSfxPlayer::set_volume(int p_value)
{ {
@ -50,7 +49,7 @@ void AOSfxPlayer::set_volume(int p_value)
float volume = p_value / 100.0f; float volume = p_value / 100.0f;
BASS_ChannelSetAttribute(m_stream, BASS_ATTRIB_VOL, volume); BASS_ChannelSetAttribute(m_stream, BASS_ATTRIB_VOL, volume);
} }
#elif defined(QTAUDIO) //Using Qt's QSoundEffect class #elif defined(QTAUDIO) // Using Qt's QSoundEffect class
AOSfxPlayer::AOSfxPlayer(QWidget *parent, AOApplication *p_ao_app) AOSfxPlayer::AOSfxPlayer(QWidget *parent, AOApplication *p_ao_app)
{ {
m_parent = parent; m_parent = parent;
@ -79,7 +78,7 @@ void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout)
else else
f_path = sound_path; f_path = sound_path;
if (file_exists(f_path)) //if its missing, it will glitch out if (file_exists(f_path)) // if its missing, it will glitch out
{ {
m_sfx.setSource(QUrl::fromLocalFile(f_path)); m_sfx.setSource(QUrl::fromLocalFile(f_path));
@ -89,10 +88,7 @@ void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout)
} }
} }
void AOSfxPlayer::stop() void AOSfxPlayer::stop() { m_sfx.stop(); }
{
m_sfx.stop();
}
void AOSfxPlayer::set_volume(int p_value) void AOSfxPlayer::set_volume(int p_value)
{ {
@ -106,18 +102,9 @@ AOSfxPlayer::AOSfxPlayer(QWidget *parent, AOApplication *p_ao_app)
ao_app = p_ao_app; ao_app = p_ao_app;
} }
void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout) void AOSfxPlayer::play(QString p_sfx, QString p_char, QString shout) {}
{
} void AOSfxPlayer::stop() {}
void AOSfxPlayer::stop() void AOSfxPlayer::set_volume(int p_value) {}
{
}
void AOSfxPlayer::set_volume(int p_value)
{
}
#endif #endif

View File

@ -1,24 +1,26 @@
#include "aotextarea.h" #include "aotextarea.h"
AOTextArea::AOTextArea(QWidget *p_parent) : QTextBrowser(p_parent) AOTextArea::AOTextArea(QWidget *p_parent) : QTextBrowser(p_parent) {}
{
} void AOTextArea::append_chatmessage(QString p_name, QString p_message,
QString p_colour)
void AOTextArea::append_chatmessage(QString p_name, QString p_message, QString p_colour)
{ {
const QTextCursor old_cursor = this->textCursor(); const QTextCursor old_cursor = this->textCursor();
const int old_scrollbar_value = this->verticalScrollBar()->value(); const int old_scrollbar_value = this->verticalScrollBar()->value();
const bool is_scrolled_down = old_scrollbar_value == this->verticalScrollBar()->maximum(); const bool is_scrolled_down =
old_scrollbar_value == this->verticalScrollBar()->maximum();
this->moveCursor(QTextCursor::End); this->moveCursor(QTextCursor::End);
this->append(""); this->append("");
this->insertHtml("<b><font color=" + p_colour + ">" + p_name.toHtmlEscaped() + "</font></b>:&nbsp;"); this->insertHtml("<b><font color=" + p_colour + ">" + p_name.toHtmlEscaped() +
"</font></b>:&nbsp;");
//cheap workarounds ahoy // cheap workarounds ahoy
p_message += " "; p_message += " ";
QString result = p_message.toHtmlEscaped().replace("\n", "<br>").replace(omnis_dank_url_regex, "<a href='\\1'>\\1</a>" ); QString result = p_message.toHtmlEscaped()
.replace("\n", "<br>")
.replace(omnis_dank_url_regex, "<a href='\\1'>\\1</a>");
this->insertHtml(result); this->insertHtml(result);
@ -29,31 +31,34 @@ void AOTextArea::append_error(QString p_message)
{ {
const QTextCursor old_cursor = this->textCursor(); const QTextCursor old_cursor = this->textCursor();
const int old_scrollbar_value = this->verticalScrollBar()->value(); const int old_scrollbar_value = this->verticalScrollBar()->value();
const bool is_scrolled_down = old_scrollbar_value == this->verticalScrollBar()->maximum(); const bool is_scrolled_down =
old_scrollbar_value == this->verticalScrollBar()->maximum();
this->moveCursor(QTextCursor::End); this->moveCursor(QTextCursor::End);
this->append(""); this->append("");
p_message += " "; p_message += " ";
QString result = p_message.replace("\n", "<br>").replace(omnis_dank_url_regex, "<a href='\\1'>\\1</a>" ); QString result = p_message.replace("\n", "<br>")
.replace(omnis_dank_url_regex, "<a href='\\1'>\\1</a>");
this->insertHtml("<font color='red'>" + result + "</font>"); this->insertHtml("<font color='red'>" + result + "</font>");
this->auto_scroll(old_cursor, old_scrollbar_value, is_scrolled_down); this->auto_scroll(old_cursor, old_scrollbar_value, is_scrolled_down);
} }
void AOTextArea::auto_scroll(QTextCursor old_cursor, int old_scrollbar_value, bool is_scrolled_down) void AOTextArea::auto_scroll(QTextCursor old_cursor, int old_scrollbar_value,
bool is_scrolled_down)
{ {
if (old_cursor.hasSelection() || !is_scrolled_down) if (old_cursor.hasSelection() || !is_scrolled_down) {
{ // The user has selected text or scrolled away from the bottom: maintain
// The user has selected text or scrolled away from the bottom: maintain position. // position.
this->setTextCursor(old_cursor); this->setTextCursor(old_cursor);
this->verticalScrollBar()->setValue(old_scrollbar_value); this->verticalScrollBar()->setValue(old_scrollbar_value);
} }
else else {
{ // The user hasn't selected any text and the scrollbar is at the bottom:
// The user hasn't selected any text and the scrollbar is at the bottom: scroll to the bottom. // scroll to the bottom.
this->moveCursor(QTextCursor::End); this->moveCursor(QTextCursor::End);
this->verticalScrollBar()->setValue(this->verticalScrollBar()->maximum()); this->verticalScrollBar()->setValue(this->verticalScrollBar()->maximum());
} }

View File

@ -4,7 +4,7 @@ AOTextEdit::AOTextEdit(QWidget *parent) : QPlainTextEdit(parent)
{ {
this->setReadOnly(true); this->setReadOnly(true);
//connect(this, SIGNAL(returnPressed()), this, SLOT(on_enter_pressed())); // connect(this, SIGNAL(returnPressed()), this, SLOT(on_enter_pressed()));
} }
void AOTextEdit::mouseDoubleClickEvent(QMouseEvent *e) void AOTextEdit::mouseDoubleClickEvent(QMouseEvent *e)
@ -14,8 +14,4 @@ void AOTextEdit::mouseDoubleClickEvent(QMouseEvent *e)
this->setReadOnly(false); this->setReadOnly(false);
} }
void AOTextEdit::on_enter_pressed() void AOTextEdit::on_enter_pressed() { this->setReadOnly(true); }
{
this->setReadOnly(true);
}

View File

@ -1,8 +1,8 @@
#include "courtroom.h" #include "courtroom.h"
#include "lobby.h" #include "lobby.h"
#include "file_functions.h"
#include "debug_functions.h" #include "debug_functions.h"
#include "file_functions.h"
#include "hardware_functions.h" #include "hardware_functions.h"
void Courtroom::construct_char_select() void Courtroom::construct_char_select()
@ -44,27 +44,34 @@ void Courtroom::construct_char_select()
set_size_and_pos(ui_char_buttons, "char_buttons"); set_size_and_pos(ui_char_buttons, "char_buttons");
connect(ui_back_to_lobby, SIGNAL(clicked()), this, SLOT(on_back_to_lobby_clicked())); connect(ui_back_to_lobby, SIGNAL(clicked()), this,
SLOT(on_back_to_lobby_clicked()));
connect(ui_char_select_left, SIGNAL(clicked()), this, SLOT(on_char_select_left_clicked())); connect(ui_char_select_left, SIGNAL(clicked()), this,
connect(ui_char_select_right, SIGNAL(clicked()), this, SLOT(on_char_select_right_clicked())); SLOT(on_char_select_left_clicked()));
connect(ui_char_select_right, SIGNAL(clicked()), this,
SLOT(on_char_select_right_clicked()));
connect(ui_spectator, SIGNAL(clicked()), this, SLOT(on_spectator_clicked())); connect(ui_spectator, SIGNAL(clicked()), this, SLOT(on_spectator_clicked()));
connect(ui_char_search, SIGNAL(textEdited(const QString&)), this, SLOT(on_char_search_changed())); connect(ui_char_search, SIGNAL(textEdited(const QString &)), this,
connect(ui_char_passworded, SIGNAL(stateChanged(int)), this, SLOT(on_char_passworded_clicked())); SLOT(on_char_search_changed()));
connect(ui_char_taken, SIGNAL(stateChanged(int)), this, SLOT(on_char_taken_clicked())); connect(ui_char_passworded, SIGNAL(stateChanged(int)), this,
SLOT(on_char_passworded_clicked()));
connect(ui_char_taken, SIGNAL(stateChanged(int)), this,
SLOT(on_char_taken_clicked()));
} }
void Courtroom::set_char_select() void Courtroom::set_char_select()
{ {
QString filename = "courtroom_design.ini"; QString filename = "courtroom_design.ini";
pos_size_type f_charselect = ao_app->get_element_dimensions("char_select", filename); pos_size_type f_charselect =
ao_app->get_element_dimensions("char_select", filename);
if (f_charselect.width < 0 || f_charselect.height < 0) if (f_charselect.width < 0 || f_charselect.height < 0) {
{ qDebug()
qDebug() << "W: did not find courtroom width or height in courtroom_design.ini!"; << "W: did not find courtroom width or height in courtroom_design.ini!";
this->resize(714, 668); this->resize(714, 668);
} }
else else
@ -85,25 +92,22 @@ void Courtroom::set_char_select_page()
ui_char_select_left->hide(); ui_char_select_left->hide();
ui_char_select_right->hide(); ui_char_select_right->hide();
for (AOCharButton *i_button : ui_char_button_list) for (AOCharButton *i_button : ui_char_button_list) {
{
i_button->reset(); i_button->reset();
i_button->hide(); i_button->hide();
i_button->move(0,0); i_button->move(0, 0);
} }
int total_pages = ui_char_button_list_filtered.size() / max_chars_on_page; int total_pages = ui_char_button_list_filtered.size() / max_chars_on_page;
int chars_on_page = 0; int chars_on_page = 0;
if (ui_char_button_list_filtered.size() % max_chars_on_page != 0) if (ui_char_button_list_filtered.size() % max_chars_on_page != 0) {
{
++total_pages; ++total_pages;
//i. e. not on the last page // i. e. not on the last page
if (total_pages > current_char_page + 1) if (total_pages > current_char_page + 1)
chars_on_page = max_chars_on_page; chars_on_page = max_chars_on_page;
else else
chars_on_page = ui_char_button_list_filtered.size() % max_chars_on_page; chars_on_page = ui_char_button_list_filtered.size() % max_chars_on_page;
} }
else else
chars_on_page = max_chars_on_page; chars_on_page = max_chars_on_page;
@ -119,23 +123,23 @@ void Courtroom::set_char_select_page()
void Courtroom::char_clicked(int n_char) void Courtroom::char_clicked(int n_char)
{ {
QString char_ini_path = ao_app->get_character_path(char_list.at(n_char).name, "char.ini"); QString char_ini_path =
ao_app->get_character_path(char_list.at(n_char).name, "char.ini");
qDebug() << "char_ini_path" << char_ini_path; qDebug() << "char_ini_path" << char_ini_path;
if (!file_exists(char_ini_path)) if (!file_exists(char_ini_path)) {
{
call_notice("Could not find " + char_ini_path); call_notice("Could not find " + char_ini_path);
return; return;
} }
if (n_char == m_cid) if (n_char == m_cid) {
{
enter_courtroom(m_cid); enter_courtroom(m_cid);
} }
else else {
{ ao_app->send_server_packet(
ao_app->send_server_packet(new AOPacket("CC#" + QString::number(ao_app->s_pv) + "#" + QString::number(n_char) + "#" + get_hdid() + "#%")); new AOPacket("CC#" + QString::number(ao_app->s_pv) + "#" +
QString::number(n_char) + "#" + get_hdid() + "#%"));
} }
ui_ic_chat_name->setPlaceholderText(char_list.at(n_char).name); ui_ic_chat_name->setPlaceholderText(char_list.at(n_char).name);
@ -146,7 +150,8 @@ void Courtroom::put_button_in_place(int starting, int chars_on_this_page)
if (ui_char_button_list_filtered.size() == 0) if (ui_char_button_list_filtered.size() == 0)
return; return;
QPoint f_spacing = ao_app->get_button_spacing("char_button_spacing", "courtroom_design.ini"); QPoint f_spacing =
ao_app->get_button_spacing("char_button_spacing", "courtroom_design.ini");
int x_spacing = f_spacing.x(); int x_spacing = f_spacing.x();
int x_mod_count = 0; int x_mod_count = 0;
@ -154,14 +159,17 @@ void Courtroom::put_button_in_place(int starting, int chars_on_this_page)
int y_spacing = f_spacing.y(); int y_spacing = f_spacing.y();
int y_mod_count = 0; int y_mod_count = 0;
char_columns = ((ui_char_buttons->width() - button_width) / (x_spacing + button_width)) + 1; char_columns =
char_rows = ((ui_char_buttons->height() - button_height) / (y_spacing + button_height)) + 1; ((ui_char_buttons->width() - button_width) / (x_spacing + button_width)) +
1;
char_rows = ((ui_char_buttons->height() - button_height) /
(y_spacing + button_height)) +
1;
max_chars_on_page = char_columns * char_rows; max_chars_on_page = char_columns * char_rows;
int startout = starting; int startout = starting;
for (int n = starting ; n < startout+chars_on_this_page ; ++n) for (int n = starting; n < startout + chars_on_this_page; ++n) {
{
int x_pos = (button_width + x_spacing) * x_mod_count; int x_pos = (button_width + x_spacing) * x_mod_count;
int y_pos = (button_height + y_spacing) * y_mod_count; int y_pos = (button_height + y_spacing) * y_mod_count;
@ -171,8 +179,7 @@ void Courtroom::put_button_in_place(int starting, int chars_on_this_page)
++x_mod_count; ++x_mod_count;
if (x_mod_count == char_columns) if (x_mod_count == char_columns) {
{
++y_mod_count; ++y_mod_count;
x_mod_count = 0; x_mod_count = 0;
} }
@ -183,9 +190,8 @@ void Courtroom::character_loading_finished()
{ {
// Zeroeth, we'll clear any leftover characters from previous server visits. // Zeroeth, we'll clear any leftover characters from previous server visits.
ao_app->generated_chars = 0; ao_app->generated_chars = 0;
if (ui_char_button_list.size() > 0) if (ui_char_button_list.size() > 0) {
{ foreach (AOCharButton *item, ui_char_button_list) {
foreach (AOCharButton* item, ui_char_button_list) {
delete item; delete item;
} }
ui_char_button_list.clear(); ui_char_button_list.clear();
@ -194,27 +200,33 @@ void Courtroom::character_loading_finished()
// First, we'll make all the character buttons in the very beginning. // First, we'll make all the character buttons in the very beginning.
// We also hide them all, so they can't be accidentally clicked. // We also hide them all, so they can't be accidentally clicked.
// Later on, we'll be revealing buttons as we need them. // Later on, we'll be revealing buttons as we need them.
for (int n = 0; n < char_list.size(); n++) for (int n = 0; n < char_list.size(); n++) {
{ AOCharButton *char_button =
AOCharButton* char_button = new AOCharButton(ui_char_buttons, ao_app, 0, 0, char_list.at(n).taken); new AOCharButton(ui_char_buttons, ao_app, 0, 0, char_list.at(n).taken);
char_button->reset(); char_button->reset();
char_button->hide(); char_button->hide();
char_button->set_image(char_list.at(n).name); char_button->set_image(char_list.at(n).name);
ui_char_button_list.append(char_button); ui_char_button_list.append(char_button);
connect(char_button, &AOCharButton::clicked, [this, n](){ connect(char_button, &AOCharButton::clicked,
this->char_clicked(n); [this, n]() { this->char_clicked(n); });
});
// This part here serves as a way of showing to the player that the game is still running, it is // This part here serves as a way of showing to the player that the game is
// just loading the pictures of the characters. // still running, it is just loading the pictures of the characters.
if (ao_app->lobby_constructed) if (ao_app->lobby_constructed) {
{
ao_app->generated_chars++; ao_app->generated_chars++;
int total_loading_size = ao_app->char_list_size * 2 + ao_app->evidence_list_size + ao_app->music_list_size; int total_loading_size = ao_app->char_list_size * 2 +
int loading_value = int(((ao_app->loaded_chars + ao_app->generated_chars + ao_app->loaded_music + ao_app->loaded_evidence) / static_cast<double>(total_loading_size)) * 100); ao_app->evidence_list_size +
ao_app->music_list_size;
int loading_value =
int(((ao_app->loaded_chars + ao_app->generated_chars +
ao_app->loaded_music + ao_app->loaded_evidence) /
static_cast<double>(total_loading_size)) *
100);
ao_app->w_lobby->set_loading_value(loading_value); ao_app->w_lobby->set_loading_value(loading_value);
ao_app->w_lobby->set_loading_text("Generating chars:\n" + QString::number(ao_app->generated_chars) + "/" + QString::number(ao_app->char_list_size)); ao_app->w_lobby->set_loading_text(
"Generating chars:\n" + QString::number(ao_app->generated_chars) +
"/" + QString::number(ao_app->char_list_size));
} }
} }
@ -224,19 +236,19 @@ void Courtroom::character_loading_finished()
void Courtroom::filter_character_list() void Courtroom::filter_character_list()
{ {
ui_char_button_list_filtered.clear(); ui_char_button_list_filtered.clear();
for (int i = 0; i < char_list.size(); i++) for (int i = 0; i < char_list.size(); i++) {
{ AOCharButton *current_char = ui_char_button_list.at(i);
AOCharButton* current_char = ui_char_button_list.at(i);
// It seems passwording characters is unimplemented yet? // It seems passwording characters is unimplemented yet?
// Until then, this will stay here, I suppose. // Until then, this will stay here, I suppose.
//if (ui_char_passworded->isChecked() && character_is_passworded??) // if (ui_char_passworded->isChecked() && character_is_passworded??)
// continue; // continue;
if (!ui_char_taken->isChecked() && char_list.at(i).taken) if (!ui_char_taken->isChecked() && char_list.at(i).taken)
continue; continue;
if (!char_list.at(i).name.contains(ui_char_search->text(), Qt::CaseInsensitive)) if (!char_list.at(i).name.contains(ui_char_search->text(),
Qt::CaseInsensitive))
continue; continue;
// We only really need to update the fact that a character is taken // We only really need to update the fact that a character is taken
@ -252,17 +264,8 @@ void Courtroom::filter_character_list()
set_char_select_page(); set_char_select_page();
} }
void Courtroom::on_char_search_changed() void Courtroom::on_char_search_changed() { filter_character_list(); }
{
filter_character_list();
}
void Courtroom::on_char_passworded_clicked() void Courtroom::on_char_passworded_clicked() { filter_character_list(); }
{
filter_character_list();
}
void Courtroom::on_char_taken_clicked() void Courtroom::on_char_taken_clicked() { filter_character_list(); }
{
filter_character_list();
}

View File

@ -9,7 +9,8 @@ chatlogpiece::chatlogpiece()
datetime = QDateTime::currentDateTime().toUTC(); datetime = QDateTime::currentDateTime().toUTC();
} }
chatlogpiece::chatlogpiece(QString p_name, QString p_showname, QString p_message, bool p_song) chatlogpiece::chatlogpiece(QString p_name, QString p_showname,
QString p_message, bool p_song)
{ {
name = p_name; name = p_name;
showname = p_showname; showname = p_showname;
@ -18,7 +19,8 @@ chatlogpiece::chatlogpiece(QString p_name, QString p_showname, QString p_message
datetime = QDateTime::currentDateTime().toUTC(); datetime = QDateTime::currentDateTime().toUTC();
} }
chatlogpiece::chatlogpiece(QString p_name, QString p_showname, QString p_message, bool p_song, QDateTime p_datetime) chatlogpiece::chatlogpiece(QString p_name, QString p_showname,
QString p_message, bool p_song, QDateTime p_datetime)
{ {
name = p_name; name = p_name;
showname = p_showname; showname = p_showname;
@ -27,36 +29,17 @@ chatlogpiece::chatlogpiece(QString p_name, QString p_showname, QString p_message
datetime = p_datetime.toUTC(); datetime = p_datetime.toUTC();
} }
QString chatlogpiece::get_name() QString chatlogpiece::get_name() { return name; }
{
return name;
}
QString chatlogpiece::get_showname() QString chatlogpiece::get_showname() { return showname; }
{
return showname;
}
QString chatlogpiece::get_message() QString chatlogpiece::get_message() { return message; }
{
return message;
}
QDateTime chatlogpiece::get_datetime() QDateTime chatlogpiece::get_datetime() { return datetime; }
{
return datetime;
}
bool chatlogpiece::get_is_song() bool chatlogpiece::get_is_song() { return is_song; }
{
return is_song;
}
QString chatlogpiece::get_datetime_as_string()
{
return datetime.toString();
}
QString chatlogpiece::get_datetime_as_string() { return datetime.toString(); }
QString chatlogpiece::get_full() QString chatlogpiece::get_full()
{ {

File diff suppressed because it is too large Load Diff

View File

@ -7,8 +7,7 @@ void call_error(QString p_message)
msgBox->setText("Error: " + p_message); msgBox->setText("Error: " + p_message);
msgBox->setWindowTitle("Error"); msgBox->setWindowTitle("Error");
// msgBox->setWindowModality(Qt::NonModal);
//msgBox->setWindowModality(Qt::NonModal);
msgBox->exec(); msgBox->exec();
} }
@ -19,7 +18,6 @@ void call_notice(QString p_message)
msgBox->setText(p_message); msgBox->setText(p_message);
msgBox->setWindowTitle("Notice"); msgBox->setWindowTitle("Notice");
// msgBox->setWindowModality(Qt::NonModal);
//msgBox->setWindowModality(Qt::NonModal);
msgBox->exec(); msgBox->exec();
} }

View File

@ -8,23 +8,18 @@ Discord::Discord()
DiscordEventHandlers handlers; DiscordEventHandlers handlers;
std::memset(&handlers, 0, sizeof(handlers)); std::memset(&handlers, 0, sizeof(handlers));
handlers = {}; handlers = {};
handlers.ready = [] { handlers.ready = [] { qInfo() << "Discord RPC ready"; };
qInfo() << "Discord RPC ready"; handlers.disconnected = [](int errorCode, const char *message) {
};
handlers.disconnected = [](int errorCode, const char* message) {
qInfo() << "Discord RPC disconnected! " << message << errorCode; qInfo() << "Discord RPC disconnected! " << message << errorCode;
}; };
handlers.errored = [](int errorCode, const char* message) { handlers.errored = [](int errorCode, const char *message) {
qWarning() << "Discord RPC errored out! " << message << errorCode; qWarning() << "Discord RPC errored out! " << message << errorCode;
}; };
qInfo() << "Initializing Discord RPC"; qInfo() << "Initializing Discord RPC";
Discord_Initialize(APPLICATION_ID, &handlers, 1, nullptr); Discord_Initialize(APPLICATION_ID, &handlers, 1, nullptr);
} }
Discord::~Discord() Discord::~Discord() { Discord_Shutdown(); }
{
Discord_Shutdown();
}
void Discord::state_lobby() void Discord::state_lobby()
{ {
@ -64,10 +59,12 @@ void Discord::state_server(std::string name, std::string server_id)
void Discord::state_character(std::string name) void Discord::state_character(std::string name)
{ {
auto name_internal = QString(name.c_str()).toLower().replace(' ', '_').toStdString(); auto name_internal =
QString(name.c_str()).toLower().replace(' ', '_').toStdString();
auto name_friendly = QString(name.c_str()).replace('_', ' ').toStdString(); auto name_friendly = QString(name.c_str()).replace('_', ' ').toStdString();
const std::string playing_as = "Playing as " + name_friendly; const std::string playing_as = "Playing as " + name_friendly;
qDebug() << "Discord RPC: Setting character state (" << playing_as.c_str() << ")"; qDebug() << "Discord RPC: Setting character state (" << playing_as.c_str()
<< ")";
DiscordRichPresence presence; DiscordRichPresence presence;
std::memset(&presence, 0, sizeof(presence)); std::memset(&presence, 0, sizeof(presence));
@ -101,20 +98,11 @@ void Discord::state_spectate()
Discord_UpdatePresence(&presence); Discord_UpdatePresence(&presence);
} }
#else #else
Discord::Discord() Discord::Discord() {}
{
} Discord::~Discord() {}
Discord::~Discord() void Discord::state_lobby() {}
{
}
void Discord::state_lobby()
{
}
void Discord::state_server(std::string name, std::string server_id) void Discord::state_server(std::string name, std::string server_id)
{ {
@ -129,7 +117,6 @@ void Discord::state_character(std::string name)
void Discord::state_spectate() void Discord::state_spectate()
{ {
qDebug() << "Discord RPC: Setting specator state"; qDebug() << "Discord RPC: Setting specator state";
} }
#endif #endif
} } // namespace AttorneyOnline

View File

@ -8,7 +8,8 @@ void Courtroom::construct_emotes()
set_size_and_pos(ui_emotes, "emotes"); set_size_and_pos(ui_emotes, "emotes");
QPoint f_spacing = ao_app->get_button_spacing("emote_button_spacing", "courtroom_design.ini"); QPoint f_spacing = ao_app->get_button_spacing("emote_button_spacing",
"courtroom_design.ini");
const int button_width = 40; const int button_width = 40;
int x_spacing = f_spacing.x(); int x_spacing = f_spacing.x();
@ -18,13 +19,14 @@ void Courtroom::construct_emotes()
int y_spacing = f_spacing.y(); int y_spacing = f_spacing.y();
int y_mod_count = 0; int y_mod_count = 0;
emote_columns = ((ui_emotes->width() - button_width) / (x_spacing + button_width)) + 1; emote_columns =
emote_rows = ((ui_emotes->height() - button_height) / (y_spacing + button_height)) + 1; ((ui_emotes->width() - button_width) / (x_spacing + button_width)) + 1;
emote_rows =
((ui_emotes->height() - button_height) / (y_spacing + button_height)) + 1;
max_emotes_on_page = emote_columns * emote_rows; max_emotes_on_page = emote_columns * emote_rows;
for (int n = 0 ; n < max_emotes_on_page ; ++n) for (int n = 0; n < max_emotes_on_page; ++n) {
{
int x_pos = (button_width + x_spacing) * x_mod_count; int x_pos = (button_width + x_spacing) * x_mod_count;
int y_pos = (button_height + y_spacing) * y_mod_count; int y_pos = (button_height + y_spacing) * y_mod_count;
@ -34,12 +36,12 @@ void Courtroom::construct_emotes()
f_emote->set_id(n); f_emote->set_id(n);
connect(f_emote, SIGNAL(emote_clicked(int)), this, SLOT(on_emote_clicked(int))); connect(f_emote, SIGNAL(emote_clicked(int)), this,
SLOT(on_emote_clicked(int)));
++x_mod_count; ++x_mod_count;
if (x_mod_count == emote_columns) if (x_mod_count == emote_columns) {
{
++y_mod_count; ++y_mod_count;
x_mod_count = 0; x_mod_count = 0;
} }
@ -56,23 +58,20 @@ void Courtroom::set_emote_page()
ui_emote_left->hide(); ui_emote_left->hide();
ui_emote_right->hide(); ui_emote_right->hide();
for (AOEmoteButton *i_button : ui_emote_list) for (AOEmoteButton *i_button : ui_emote_list) {
{
i_button->hide(); i_button->hide();
} }
int total_pages = total_emotes / max_emotes_on_page; int total_pages = total_emotes / max_emotes_on_page;
int emotes_on_page = 0; int emotes_on_page = 0;
if (total_emotes % max_emotes_on_page != 0) if (total_emotes % max_emotes_on_page != 0) {
{
++total_pages; ++total_pages;
//i. e. not on the last page // i. e. not on the last page
if (total_pages > current_emote_page + 1) if (total_pages > current_emote_page + 1)
emotes_on_page = max_emotes_on_page; emotes_on_page = max_emotes_on_page;
else else
emotes_on_page = total_emotes % max_emotes_on_page; emotes_on_page = total_emotes % max_emotes_on_page;
} }
else else
emotes_on_page = max_emotes_on_page; emotes_on_page = max_emotes_on_page;
@ -83,8 +82,7 @@ void Courtroom::set_emote_page()
if (current_emote_page > 0) if (current_emote_page > 0)
ui_emote_left->show(); ui_emote_left->show();
for (int n_emote = 0 ; n_emote < emotes_on_page ; ++n_emote) for (int n_emote = 0; n_emote < emotes_on_page; ++n_emote) {
{
int n_real_emote = n_emote + current_emote_page * max_emotes_on_page; int n_real_emote = n_emote + current_emote_page * max_emotes_on_page;
AOEmoteButton *f_emote = ui_emote_list.at(n_emote); AOEmoteButton *f_emote = ui_emote_list.at(n_emote);
@ -95,7 +93,6 @@ void Courtroom::set_emote_page()
f_emote->show(); f_emote->show();
} }
} }
void Courtroom::set_emote_dropdown() void Courtroom::set_emote_dropdown()
@ -105,8 +102,7 @@ void Courtroom::set_emote_dropdown()
int total_emotes = ao_app->get_emote_number(current_char); int total_emotes = ao_app->get_emote_number(current_char);
QStringList emote_list; QStringList emote_list;
for (int n = 0 ; n < total_emotes ; ++n) for (int n = 0; n < total_emotes; ++n) {
{
emote_list.append(ao_app->get_emote_comment(current_char, n)); emote_list.append(ao_app->get_emote_comment(current_char, n));
} }
@ -119,19 +115,20 @@ void Courtroom::select_emote(int p_id)
int max = (max_emotes_on_page - 1) + current_emote_page * max_emotes_on_page; int max = (max_emotes_on_page - 1) + current_emote_page * max_emotes_on_page;
if (current_emote >= min && current_emote <= max) if (current_emote >= min && current_emote <= max)
ui_emote_list.at(current_emote % max_emotes_on_page)->set_image(current_char, current_emote, "_off.png"); ui_emote_list.at(current_emote % max_emotes_on_page)
->set_image(current_char, current_emote, "_off.png");
int old_emote = current_emote; int old_emote = current_emote;
current_emote = p_id; current_emote = p_id;
if (current_emote >= min && current_emote <= max) if (current_emote >= min && current_emote <= max)
ui_emote_list.at(current_emote % max_emotes_on_page)->set_image(current_char, current_emote, "_on.png"); ui_emote_list.at(current_emote % max_emotes_on_page)
->set_image(current_char, current_emote, "_on.png");
int emote_mod = ao_app->get_emote_mod(current_char, current_emote); int emote_mod = ao_app->get_emote_mod(current_char, current_emote);
if (old_emote == current_emote) if (old_emote == current_emote) {
{
ui_pre->setChecked(!ui_pre->isChecked()); ui_pre->setChecked(!ui_pre->isChecked());
} }
else if (emote_mod == 1) else if (emote_mod == 1)

View File

@ -4,8 +4,8 @@
QString fanta_encrypt(QString temp_input, unsigned int p_key) QString fanta_encrypt(QString temp_input, unsigned int p_key)
{ {
//using standard stdlib types is actually easier here because of implicit char<->int conversion // using standard stdlib types is actually easier here because of implicit
//which in turn makes encryption arithmetic easier // char<->int conversion which in turn makes encryption arithmetic easier
unsigned int key = p_key; unsigned int key = p_key;
unsigned int C1 = 53761; unsigned int C1 = 53761;
@ -14,8 +14,7 @@ QString fanta_encrypt(QString temp_input, unsigned int p_key)
QVector<uint_fast8_t> temp_result; QVector<uint_fast8_t> temp_result;
std::string input = temp_input.toUtf8().constData(); std::string input = temp_input.toUtf8().constData();
for (unsigned int pos = 0 ; pos < input.size() ; ++pos) for (unsigned int pos = 0; pos < input.size(); ++pos) {
{
uint_fast8_t output = input.at(pos) ^ (key >> 8) % 256; uint_fast8_t output = input.at(pos) ^ (key >> 8) % 256;
temp_result.append(output); temp_result.append(output);
key = (temp_result.at(pos) + key) * C1 + C2; key = (temp_result.at(pos) + key) * C1 + C2;
@ -23,8 +22,7 @@ QString fanta_encrypt(QString temp_input, unsigned int p_key)
std::string result = ""; std::string result = "";
for (uint_fast8_t i_int : temp_result) for (uint_fast8_t i_int : temp_result) {
{
result += omni::int_to_hex(i_int); result += omni::int_to_hex(i_int);
} }
@ -39,9 +37,8 @@ QString fanta_decrypt(QString temp_input, unsigned int key)
QVector<unsigned int> unhexed_vector; QVector<unsigned int> unhexed_vector;
for(unsigned int i=0; i< input.length(); i+=2) for (unsigned int i = 0; i < input.length(); i += 2) {
{ std::string byte = input.substr(i, 2);
std::string byte = input.substr(i,2);
unsigned int hex_int = strtoul(byte.c_str(), nullptr, 16); unsigned int hex_int = strtoul(byte.c_str(), nullptr, 16);
unhexed_vector.append(hex_int); unhexed_vector.append(hex_int);
} }
@ -51,13 +48,11 @@ QString fanta_decrypt(QString temp_input, unsigned int key)
std::string result = ""; std::string result = "";
for (int pos = 0 ; pos < unhexed_vector.size() ; ++pos) for (int pos = 0; pos < unhexed_vector.size(); ++pos) {
{
unsigned char output = unhexed_vector.at(pos) ^ (key >> 8) % 256; unsigned char output = unhexed_vector.at(pos) ^ (key >> 8) % 256;
result += output; result += output;
key = (unhexed_vector.at(pos) + key) * C1 + C2; key = (unhexed_vector.at(pos) + key) * C1 + C2;
} }
return QString::fromStdString(result); return QString::fromStdString(result);
} }

View File

@ -4,7 +4,7 @@ void Courtroom::construct_evidence()
{ {
ui_evidence = new AOImage(this, ao_app); ui_evidence = new AOImage(this, ao_app);
//ui_evidence_name = new QLabel(ui_evidence); // ui_evidence_name = new QLabel(ui_evidence);
ui_evidence_name = new AOLineEdit(ui_evidence); ui_evidence_name = new AOLineEdit(ui_evidence);
ui_evidence_name->setAlignment(Qt::AlignCenter); ui_evidence_name->setAlignment(Qt::AlignCenter);
ui_evidence_name->setFont(QFont("Arial", 14, QFont::Bold)); ui_evidence_name->setFont(QFont("Arial", 14, QFont::Bold));
@ -32,7 +32,8 @@ void Courtroom::construct_evidence()
set_size_and_pos(ui_evidence, "evidence_background"); set_size_and_pos(ui_evidence, "evidence_background");
set_size_and_pos(ui_evidence_buttons, "evidence_buttons"); set_size_and_pos(ui_evidence_buttons, "evidence_buttons");
QPoint f_spacing = ao_app->get_button_spacing("evidence_button_spacing", "courtroom_design.ini"); QPoint f_spacing = ao_app->get_button_spacing("evidence_button_spacing",
"courtroom_design.ini");
const int button_width = 70; const int button_width = 70;
int x_spacing = f_spacing.x(); int x_spacing = f_spacing.x();
@ -42,43 +43,57 @@ void Courtroom::construct_evidence()
int y_spacing = f_spacing.y(); int y_spacing = f_spacing.y();
int y_mod_count = 0; int y_mod_count = 0;
evidence_columns = ((ui_evidence_buttons->width() - button_width) / (x_spacing + button_width)) + 1; evidence_columns = ((ui_evidence_buttons->width() - button_width) /
evidence_rows = ((ui_evidence_buttons->height() - button_height) / (y_spacing + button_height)) + 1; (x_spacing + button_width)) +
1;
evidence_rows = ((ui_evidence_buttons->height() - button_height) /
(y_spacing + button_height)) +
1;
max_evidence_on_page = evidence_columns * evidence_rows; max_evidence_on_page = evidence_columns * evidence_rows;
for (int n = 0 ; n < max_evidence_on_page ; ++n) for (int n = 0; n < max_evidence_on_page; ++n) {
{
int x_pos = (button_width + x_spacing) * x_mod_count; int x_pos = (button_width + x_spacing) * x_mod_count;
int y_pos = (button_height + y_spacing) * y_mod_count; int y_pos = (button_height + y_spacing) * y_mod_count;
AOEvidenceButton *f_evidence = new AOEvidenceButton(ui_evidence_buttons, ao_app, x_pos, y_pos); AOEvidenceButton *f_evidence =
new AOEvidenceButton(ui_evidence_buttons, ao_app, x_pos, y_pos);
ui_evidence_list.append(f_evidence); ui_evidence_list.append(f_evidence);
f_evidence->set_id(n); f_evidence->set_id(n);
connect(f_evidence, SIGNAL(evidence_clicked(int)), this, SLOT(on_evidence_clicked(int))); connect(f_evidence, SIGNAL(evidence_clicked(int)), this,
connect(f_evidence, SIGNAL(evidence_double_clicked(int)), this, SLOT(on_evidence_double_clicked(int))); SLOT(on_evidence_clicked(int)));
connect(f_evidence, SIGNAL(on_hover(int, bool)), this, SLOT(on_evidence_hover(int, bool))); connect(f_evidence, SIGNAL(evidence_double_clicked(int)), this,
SLOT(on_evidence_double_clicked(int)));
connect(f_evidence, SIGNAL(on_hover(int, bool)), this,
SLOT(on_evidence_hover(int, bool)));
++x_mod_count; ++x_mod_count;
if (x_mod_count == evidence_columns) if (x_mod_count == evidence_columns) {
{
++y_mod_count; ++y_mod_count;
x_mod_count = 0; x_mod_count = 0;
} }
} }
connect(ui_evidence_name, SIGNAL(returnPressed()), this, SLOT(on_evidence_name_edited())); connect(ui_evidence_name, SIGNAL(returnPressed()), this,
connect(ui_evidence_left, SIGNAL(clicked()), this, SLOT(on_evidence_left_clicked())); SLOT(on_evidence_name_edited()));
connect(ui_evidence_right, SIGNAL(clicked()), this, SLOT(on_evidence_right_clicked())); connect(ui_evidence_left, SIGNAL(clicked()), this,
connect(ui_evidence_present, SIGNAL(clicked()), this, SLOT(on_evidence_present_clicked())); SLOT(on_evidence_left_clicked()));
connect(ui_evidence_delete, SIGNAL(clicked()), this, SLOT(on_evidence_delete_clicked())); connect(ui_evidence_right, SIGNAL(clicked()), this,
connect(ui_evidence_image_name, SIGNAL(returnPressed()), this, SLOT(on_evidence_image_name_edited())); SLOT(on_evidence_right_clicked()));
connect(ui_evidence_image_button, SIGNAL(clicked()), this, SLOT(on_evidence_image_button_clicked())); connect(ui_evidence_present, SIGNAL(clicked()), this,
connect(ui_evidence_x, SIGNAL(clicked()), this, SLOT(on_evidence_x_clicked())); SLOT(on_evidence_present_clicked()));
connect(ui_evidence_delete, SIGNAL(clicked()), this,
SLOT(on_evidence_delete_clicked()));
connect(ui_evidence_image_name, SIGNAL(returnPressed()), this,
SLOT(on_evidence_image_name_edited()));
connect(ui_evidence_image_button, SIGNAL(clicked()), this,
SLOT(on_evidence_image_button_clicked()));
connect(ui_evidence_x, SIGNAL(clicked()), this,
SLOT(on_evidence_x_clicked()));
ui_evidence->hide(); ui_evidence->hide();
} }
@ -98,26 +113,23 @@ void Courtroom::set_evidence_page()
ui_evidence_left->hide(); ui_evidence_left->hide();
ui_evidence_right->hide(); ui_evidence_right->hide();
for (AOEvidenceButton *i_button : ui_evidence_list) for (AOEvidenceButton *i_button : ui_evidence_list) {
{
i_button->reset(); i_button->reset();
} }
//to account for the "add evidence" button // to account for the "add evidence" button
++total_evidence; ++total_evidence;
int total_pages = total_evidence / max_evidence_on_page; int total_pages = total_evidence / max_evidence_on_page;
int evidence_on_page = 0; int evidence_on_page = 0;
if ((total_evidence % max_evidence_on_page) != 0) if ((total_evidence % max_evidence_on_page) != 0) {
{
++total_pages; ++total_pages;
//i. e. not on the last page // i. e. not on the last page
if (total_pages > current_evidence_page + 1) if (total_pages > current_evidence_page + 1)
evidence_on_page = max_evidence_on_page; evidence_on_page = max_evidence_on_page;
else else
evidence_on_page = total_evidence % max_evidence_on_page; evidence_on_page = total_evidence % max_evidence_on_page;
} }
else else
evidence_on_page = max_evidence_on_page; evidence_on_page = max_evidence_on_page;
@ -128,17 +140,19 @@ void Courtroom::set_evidence_page()
if (current_evidence_page > 0) if (current_evidence_page > 0)
ui_evidence_left->show(); ui_evidence_left->show();
for (int n_evidence_button = 0 ; n_evidence_button < evidence_on_page ; ++n_evidence_button) for (int n_evidence_button = 0; n_evidence_button < evidence_on_page;
{ ++n_evidence_button) {
int n_real_evidence = n_evidence_button + current_evidence_page * max_evidence_on_page; int n_real_evidence =
AOEvidenceButton *f_evidence_button = ui_evidence_list.at(n_evidence_button); n_evidence_button + current_evidence_page * max_evidence_on_page;
AOEvidenceButton *f_evidence_button =
ui_evidence_list.at(n_evidence_button);
//ie. the add evidence button // ie. the add evidence button
if (n_real_evidence == (total_evidence - 1)) if (n_real_evidence == (total_evidence - 1))
f_evidence_button->set_theme_image("addevidence.png"); f_evidence_button->set_theme_image("addevidence.png");
else if (n_real_evidence < (total_evidence - 1)) else if (n_real_evidence < (total_evidence - 1)) {
{ f_evidence_button->set_image(
f_evidence_button->set_image(local_evidence_list.at(n_real_evidence).image); local_evidence_list.at(n_real_evidence).image);
if (n_real_evidence == current_evidence) if (n_real_evidence == current_evidence)
f_evidence_button->set_selected(true); f_evidence_button->set_selected(true);
@ -215,9 +229,9 @@ void Courtroom::on_evidence_clicked(int p_id)
int f_real_id = p_id + max_evidence_on_page * current_evidence_page; int f_real_id = p_id + max_evidence_on_page * current_evidence_page;
if (f_real_id == local_evidence_list.size()) if (f_real_id == local_evidence_list.size()) {
{ ao_app->send_server_packet(
ao_app->send_server_packet(new AOPacket("PE#<name>#<description>#empty.png#%")); new AOPacket("PE#<name>#<description>#empty.png#%"));
return; return;
} }
else if (f_real_id > local_evidence_list.size()) else if (f_real_id > local_evidence_list.size())
@ -233,7 +247,6 @@ void Courtroom::on_evidence_clicked(int p_id)
current_evidence = f_real_id; current_evidence = f_real_id;
ui_ic_chat_message->setFocus(); ui_ic_chat_message->setFocus();
} }
void Courtroom::on_evidence_double_clicked(int p_id) void Courtroom::on_evidence_double_clicked(int p_id)
@ -262,8 +275,7 @@ void Courtroom::on_evidence_hover(int p_id, bool p_state)
ui_evidence_name->setReadOnly(true); ui_evidence_name->setReadOnly(true);
int final_id = p_id + max_evidence_on_page * current_evidence_page; int final_id = p_id + max_evidence_on_page * current_evidence_page;
if (p_state) if (p_state) {
{
if (final_id == local_evidence_list.size()) if (final_id == local_evidence_list.size())
ui_evidence_name->setText("Add new evidence..."); ui_evidence_name->setText("Add new evidence...");
else if (final_id < local_evidence_list.size()) else if (final_id < local_evidence_list.size())
@ -310,7 +322,8 @@ void Courtroom::on_evidence_delete_clicked()
ui_evidence_description->setReadOnly(true); ui_evidence_description->setReadOnly(true);
ui_evidence_overlay->hide(); ui_evidence_overlay->hide();
ao_app->send_server_packet(new AOPacket("DE#" + QString::number(current_evidence) + "#%")); ao_app->send_server_packet(
new AOPacket("DE#" + QString::number(current_evidence) + "#%"));
current_evidence = 0; current_evidence = 0;
@ -338,4 +351,3 @@ void Courtroom::on_evidence_x_clicked()
ui_ic_chat_message->setFocus(); ui_ic_chat_message->setFocus();
} }

View File

@ -14,7 +14,8 @@ bool dir_exists(QString dir_path)
return check_dir.exists(); return check_dir.exists();
} }
bool exists(QString p_path) { bool exists(QString p_path)
{
QFile file(p_path); QFile file(p_path);
return file.exists(); return file.exists();

View File

@ -2,7 +2,7 @@
#include <QDebug> #include <QDebug>
#if (defined (_WIN32) || defined (_WIN64)) #if (defined(_WIN32) || defined(_WIN64))
#include <windows.h> #include <windows.h>
static DWORD dwVolSerial; static DWORD dwVolSerial;
@ -10,17 +10,18 @@ static BOOL bIsRetrieved;
QString get_hdid() QString get_hdid()
{ {
bIsRetrieved = GetVolumeInformation(TEXT("C:\\"), nullptr, 0, &dwVolSerial, nullptr, nullptr, nullptr, 0); bIsRetrieved = GetVolumeInformation(TEXT("C:\\"), nullptr, 0, &dwVolSerial,
nullptr, nullptr, nullptr, 0);
if (bIsRetrieved) if (bIsRetrieved)
return QString::number(dwVolSerial, 16); return QString::number(dwVolSerial, 16);
else else
//a totally random string // a totally random string
//what could possibly go wrong // what could possibly go wrong
return "gxsps32sa9fnwic92mfbs0"; return "gxsps32sa9fnwic92mfbs0";
} }
#elif (defined (LINUX) || defined (__linux__)) #elif (defined(LINUX) || defined(__linux__))
#include <QFile> #include <QFile>
#include <QTextStream> #include <QTextStream>
@ -33,12 +34,10 @@ QString get_hdid()
QTextStream in(&fstab_file); QTextStream in(&fstab_file);
while(!in.atEnd()) while (!in.atEnd()) {
{
QString line = in.readLine(); QString line = in.readLine();
if (line.startsWith("UUID")) if (line.startsWith("UUID")) {
{
QStringList line_elements = line.split("="); QStringList line_elements = line.split("=");
if (line_elements.size() > 1) if (line_elements.size() > 1)
@ -52,7 +51,7 @@ QString get_hdid()
#elif defined __APPLE__ #elif defined __APPLE__
QString get_hdid() QString get_hdid()
{ {
//hdids are broken at this point anyways // hdids are broken at this point anyways
return "just a mac passing by"; return "just a mac passing by";
} }

View File

@ -1,18 +1,17 @@
#include "hex_functions.h" #include "hex_functions.h"
namespace omni namespace omni {
std::string int_to_hex(unsigned int input)
{ {
std::string int_to_hex(unsigned int input)
{
if (input > 255) if (input > 255)
return "FF"; return "FF";
std::stringstream stream; std::stringstream stream;
stream << std::setfill('0') << std::setw(sizeof(char)*2) stream << std::setfill('0') << std::setw(sizeof(char) * 2) << std::hex
<< std::hex << input; << input;
std::string result(stream.str()); std::string result(stream.str());
std::transform(result.begin(), result.end(), result.begin(), ::toupper); std::transform(result.begin(), result.end(), result.begin(), ::toupper);
return result; return result;
}
} }
} // namespace omni

View File

@ -1,9 +1,9 @@
#include "lobby.h" #include "lobby.h"
#include "debug_functions.h"
#include "aoapplication.h" #include "aoapplication.h"
#include "networkmanager.h"
#include "aosfxplayer.h" #include "aosfxplayer.h"
#include "debug_functions.h"
#include "networkmanager.h"
Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow() Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
{ {
@ -37,17 +37,22 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
ui_progress_bar->setStyleSheet("QProgressBar{ color: white; }"); ui_progress_bar->setStyleSheet("QProgressBar{ color: white; }");
ui_cancel = new AOButton(ui_loading_background, ao_app); ui_cancel = new AOButton(ui_loading_background, ao_app);
connect(ui_public_servers, SIGNAL(clicked()), this, SLOT(on_public_servers_clicked())); connect(ui_public_servers, SIGNAL(clicked()), this,
SLOT(on_public_servers_clicked()));
connect(ui_favorites, SIGNAL(clicked()), this, SLOT(on_favorites_clicked())); connect(ui_favorites, SIGNAL(clicked()), this, SLOT(on_favorites_clicked()));
connect(ui_refresh, SIGNAL(pressed()), this, SLOT(on_refresh_pressed())); connect(ui_refresh, SIGNAL(pressed()), this, SLOT(on_refresh_pressed()));
connect(ui_refresh, SIGNAL(released()), this, SLOT(on_refresh_released())); connect(ui_refresh, SIGNAL(released()), this, SLOT(on_refresh_released()));
connect(ui_add_to_fav, SIGNAL(pressed()), this, SLOT(on_add_to_fav_pressed())); connect(ui_add_to_fav, SIGNAL(pressed()), this,
connect(ui_add_to_fav, SIGNAL(released()), this, SLOT(on_add_to_fav_released())); SLOT(on_add_to_fav_pressed()));
connect(ui_add_to_fav, SIGNAL(released()), this,
SLOT(on_add_to_fav_released()));
connect(ui_connect, SIGNAL(pressed()), this, SLOT(on_connect_pressed())); connect(ui_connect, SIGNAL(pressed()), this, SLOT(on_connect_pressed()));
connect(ui_connect, SIGNAL(released()), this, SLOT(on_connect_released())); connect(ui_connect, SIGNAL(released()), this, SLOT(on_connect_released()));
connect(ui_about, SIGNAL(clicked()), this, SLOT(on_about_clicked())); connect(ui_about, SIGNAL(clicked()), this, SLOT(on_about_clicked()));
connect(ui_server_list, SIGNAL(clicked(QModelIndex)), this, SLOT(on_server_list_clicked(QModelIndex))); connect(ui_server_list, SIGNAL(clicked(QModelIndex)), this,
connect(ui_chatmessage, SIGNAL(returnPressed()), this, SLOT(on_chatfield_return_pressed())); SLOT(on_server_list_clicked(QModelIndex)));
connect(ui_chatmessage, SIGNAL(returnPressed()), this,
SLOT(on_chatfield_return_pressed()));
connect(ui_cancel, SIGNAL(clicked()), ao_app, SLOT(loading_cancelled())); connect(ui_cancel, SIGNAL(clicked()), ao_app, SLOT(loading_cancelled()));
ui_connect->setEnabled(false); ui_connect->setEnabled(false);
@ -57,7 +62,7 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
set_widgets(); set_widgets();
} }
//sets images, position and size // sets images, position and size
void Lobby::set_widgets() void Lobby::set_widgets()
{ {
ao_app->reload_theme(); ao_app->reload_theme();
@ -66,8 +71,7 @@ void Lobby::set_widgets()
pos_size_type f_lobby = ao_app->get_element_dimensions("lobby", filename); pos_size_type f_lobby = ao_app->get_element_dimensions("lobby", filename);
if (f_lobby.width < 0 || f_lobby.height < 0) if (f_lobby.width < 0 || f_lobby.height < 0) {
{
qDebug() << "W: did not find lobby width or height in " << filename; qDebug() << "W: did not find lobby width or height in " << filename;
// Most common symptom of bad config files and missing assets. // Most common symptom of bad config files and missing assets.
@ -77,8 +81,7 @@ void Lobby::set_widgets()
this->resize(517, 666); this->resize(517, 666);
} }
else else {
{
this->resize(f_lobby.width, f_lobby.height); this->resize(f_lobby.width, f_lobby.height);
} }
@ -123,20 +126,21 @@ void Lobby::set_widgets()
set_size_and_pos(ui_chatbox, "chatbox"); set_size_and_pos(ui_chatbox, "chatbox");
ui_chatbox->setReadOnly(true); ui_chatbox->setReadOnly(true);
ui_chatbox->setStyleSheet("QTextBrowser{background-color: rgba(0, 0, 0, 0);}"); ui_chatbox->setStyleSheet(
"QTextBrowser{background-color: rgba(0, 0, 0, 0);}");
set_size_and_pos(ui_chatname, "chatname"); set_size_and_pos(ui_chatname, "chatname");
ui_chatname->setStyleSheet("background-color: rgba(0, 0, 0, 0);" ui_chatname->setStyleSheet("background-color: rgba(0, 0, 0, 0);"
"selection-background-color: rgba(0, 0, 0, 0);"); "selection-background-color: rgba(0, 0, 0, 0);");
set_size_and_pos(ui_chatmessage, "chatmessage"); set_size_and_pos(ui_chatmessage, "chatmessage");
ui_chatmessage->setStyleSheet("background-color: rgba(0, 0, 0, 0);" ui_chatmessage->setStyleSheet(
"background-color: rgba(0, 0, 0, 0);"
"selection-background-color: rgba(0, 0, 0, 0);"); "selection-background-color: rgba(0, 0, 0, 0);");
ui_loading_background->resize(this->width(), this->height()); ui_loading_background->resize(this->width(), this->height());
ui_loading_background->set_image("loadingbackground.png"); ui_loading_background->set_image("loadingbackground.png");
set_size_and_pos(ui_loading_text, "loading_label"); set_size_and_pos(ui_loading_text, "loading_label");
ui_loading_text->setFont(QFont("Arial", 20, QFont::Bold)); ui_loading_text->setFont(QFont("Arial", 20, QFont::Bold));
ui_loading_text->setReadOnly(true); ui_loading_text->setReadOnly(true);
@ -151,22 +155,20 @@ void Lobby::set_widgets()
ui_cancel->setText("Cancel"); ui_cancel->setText("Cancel");
ui_loading_background->hide(); ui_loading_background->hide();
} }
void Lobby::set_size_and_pos(QWidget *p_widget, QString p_identifier) void Lobby::set_size_and_pos(QWidget *p_widget, QString p_identifier)
{ {
QString filename = "lobby_design.ini"; QString filename = "lobby_design.ini";
pos_size_type design_ini_result = ao_app->get_element_dimensions(p_identifier, filename); pos_size_type design_ini_result =
ao_app->get_element_dimensions(p_identifier, filename);
if (design_ini_result.width < 0 || design_ini_result.height < 0) if (design_ini_result.width < 0 || design_ini_result.height < 0) {
{
qDebug() << "W: could not find " << p_identifier << " in " << filename; qDebug() << "W: could not find " << p_identifier << " in " << filename;
p_widget->hide(); p_widget->hide();
} }
else else {
{
p_widget->move(design_ini_result.x, design_ini_result.y); p_widget->move(design_ini_result.x, design_ini_result.y);
p_widget->resize(design_ini_result.width, design_ini_result.height); p_widget->resize(design_ini_result.width, design_ini_result.height);
} }
@ -186,10 +188,7 @@ QString Lobby::get_chatlog()
return return_value; return return_value;
} }
int Lobby::get_selected_server() int Lobby::get_selected_server() { return ui_server_list->currentRow(); }
{
return ui_server_list->currentRow();
}
void Lobby::set_loading_value(int p_value) void Lobby::set_loading_value(int p_value)
{ {
@ -212,7 +211,7 @@ void Lobby::on_favorites_clicked()
ui_public_servers->set_image("publicservers.png"); ui_public_servers->set_image("publicservers.png");
ao_app->set_favorite_list(); ao_app->set_favorite_list();
//ao_app->favorite_list = read_serverlist_txt(); // ao_app->favorite_list = read_serverlist_txt();
list_favorites(); list_favorites();
@ -242,7 +241,7 @@ void Lobby::on_add_to_fav_released()
{ {
ui_add_to_fav->set_image("addtofav.png"); ui_add_to_fav->set_image("addtofav.png");
//you cant add favorites from favorites m8 // you cant add favorites from favorites m8
if (!public_servers_selected) if (!public_servers_selected)
return; return;
@ -267,7 +266,8 @@ void Lobby::on_connect_released()
void Lobby::on_about_clicked() void Lobby::on_about_clicked()
{ {
QString msg = tr("<h2>Attorney Online %1</h2>" QString msg =
tr("<h2>Attorney Online %1</h2>"
"The courtroom drama simulator" "The courtroom drama simulator"
"<p><b>Source code:</b> " "<p><b>Source code:</b> "
"<a href='https://github.com/AttorneyOnline/AO2-Client'>" "<a href='https://github.com/AttorneyOnline/AO2-Client'>"
@ -290,8 +290,7 @@ void Lobby::on_server_list_clicked(QModelIndex p_model)
if (n_server < 0) if (n_server < 0)
return; return;
if (public_servers_selected) if (public_servers_selected) {
{
QVector<server_type> f_server_list = ao_app->get_server_list(); QVector<server_type> f_server_list = ao_app->get_server_list();
if (n_server >= f_server_list.size()) if (n_server >= f_server_list.size())
@ -299,8 +298,7 @@ void Lobby::on_server_list_clicked(QModelIndex p_model)
f_server = f_server_list.at(p_model.row()); f_server = f_server_list.at(p_model.row());
} }
else else {
{
if (n_server >= ao_app->get_favorite_list().size()) if (n_server >= ao_app->get_favorite_list().size())
return; return;
@ -322,11 +320,10 @@ void Lobby::on_server_list_clicked(QModelIndex p_model)
void Lobby::on_chatfield_return_pressed() void Lobby::on_chatfield_return_pressed()
{ {
//no you can't send empty messages // no you can't send empty messages
if (ui_chatname->text() == "" || ui_chatmessage->text() == "") if (ui_chatname->text() == "" || ui_chatmessage->text() == "")
return; return;
QString f_header = "CT"; QString f_header = "CT";
QStringList f_contents{ui_chatname->text(), ui_chatmessage->text()}; QStringList f_contents{ui_chatname->text(), ui_chatmessage->text()};
@ -345,8 +342,7 @@ void Lobby::list_servers()
ui_server_list->clear(); ui_server_list->clear();
for (server_type i_server : ao_app->get_server_list()) for (server_type i_server : ao_app->get_server_list()) {
{
ui_server_list->addItem(i_server.name); ui_server_list->addItem(i_server.name);
} }
} }
@ -355,15 +351,16 @@ void Lobby::list_favorites()
{ {
ui_server_list->clear(); ui_server_list->clear();
for (server_type i_server : ao_app->get_favorite_list()) for (server_type i_server : ao_app->get_favorite_list()) {
{
ui_server_list->addItem(i_server.name); ui_server_list->addItem(i_server.name);
} }
} }
void Lobby::append_chatmessage(QString f_name, QString f_message) void Lobby::append_chatmessage(QString f_name, QString f_message)
{ {
ui_chatbox->append_chatmessage(f_name, f_message, ao_app->get_color("ooc_default_color", "courtroom_design.ini").name()); ui_chatbox->append_chatmessage(
f_name, f_message,
ao_app->get_color("ooc_default_color", "courtroom_design.ini").name());
} }
void Lobby::append_error(QString f_message) void Lobby::append_error(QString f_message)
@ -373,16 +370,11 @@ void Lobby::append_error(QString f_message)
void Lobby::set_player_count(int players_online, int max_players) void Lobby::set_player_count(int players_online, int max_players)
{ {
QString f_string = "Online: " + QString::number(players_online) + "/" + QString::number(max_players); QString f_string = "Online: " + QString::number(players_online) + "/" +
QString::number(max_players);
ui_player_count->setText(f_string); ui_player_count->setText(f_string);
} }
void Lobby::enable_connect_button() void Lobby::enable_connect_button() { ui_connect->setEnabled(true); }
{
ui_connect->setEnabled(true);
}
Lobby::~Lobby() Lobby::~Lobby() {}
{
}

View File

@ -1,12 +1,12 @@
#include "aoapplication.h" #include "aoapplication.h"
#include "datatypes.h"
#include "networkmanager.h"
#include "lobby.h"
#include "courtroom.h" #include "courtroom.h"
#include <QPluginLoader> #include "datatypes.h"
#include "lobby.h"
#include "networkmanager.h"
#include <QDebug> #include <QDebug>
#include <QPluginLoader>
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#if QT_VERSION > QT_VERSION_CHECK(5, 6, 0) #if QT_VERSION > QT_VERSION_CHECK(5, 6, 0)

View File

@ -4,6 +4,6 @@ void delay(int p_milliseconds)
{ {
QTime dieTime = QTime::currentTime().addMSecs(p_milliseconds); QTime dieTime = QTime::currentTime().addMSecs(p_milliseconds);
while(QTime::currentTime() < dieTime) while (QTime::currentTime() < dieTime)
QCoreApplication::processEvents(QEventLoop::AllEvents, 100); QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
} }

View File

@ -13,21 +13,23 @@ NetworkManager::NetworkManager(AOApplication *parent) : QObject(parent)
ms_reconnect_timer = new QTimer(this); ms_reconnect_timer = new QTimer(this);
ms_reconnect_timer->setSingleShot(true); ms_reconnect_timer->setSingleShot(true);
QObject::connect(ms_reconnect_timer, SIGNAL(timeout()), this, SLOT(retry_ms_connect())); QObject::connect(ms_reconnect_timer, SIGNAL(timeout()), this,
SLOT(retry_ms_connect()));
QObject::connect(ms_socket, SIGNAL(readyRead()), this, SLOT(handle_ms_packet())); QObject::connect(ms_socket, SIGNAL(readyRead()), this,
QObject::connect(server_socket, SIGNAL(readyRead()), this, SLOT(handle_server_packet())); SLOT(handle_ms_packet()));
QObject::connect(server_socket, SIGNAL(disconnected()), ao_app, SLOT(server_disconnected())); QObject::connect(server_socket, SIGNAL(readyRead()), this,
SLOT(handle_server_packet()));
QObject::connect(server_socket, SIGNAL(disconnected()), ao_app,
SLOT(server_disconnected()));
QString master_config = ao_app->configini->value("master", "").value<QString>(); QString master_config =
ao_app->configini->value("master", "").value<QString>();
if (master_config != "") if (master_config != "")
ms_nosrv_hostname = master_config; ms_nosrv_hostname = master_config;
} }
NetworkManager::~NetworkManager() NetworkManager::~NetworkManager() {}
{
}
void NetworkManager::connect_to_master() void NetworkManager::connect_to_master()
{ {
@ -43,11 +45,11 @@ void NetworkManager::connect_to_master()
void NetworkManager::connect_to_master_nosrv() void NetworkManager::connect_to_master_nosrv()
{ {
QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)), QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)), this,
this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError))); SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
QObject::connect(ms_socket, SIGNAL(connected()), QObject::connect(ms_socket, SIGNAL(connected()), this,
this, SLOT(on_ms_nosrv_connect_success())); SLOT(on_ms_nosrv_connect_success()));
ms_socket->connectToHost(ms_nosrv_hostname, ms_port); ms_socket->connectToHost(ms_nosrv_hostname, ms_port);
} }
@ -61,12 +63,10 @@ void NetworkManager::connect_to_server(server_type p_server)
void NetworkManager::ship_ms_packet(QString p_packet) void NetworkManager::ship_ms_packet(QString p_packet)
{ {
if (!ms_socket->isOpen()) if (!ms_socket->isOpen()) {
{
retry_ms_connect(); retry_ms_connect();
} }
else else {
{
ms_socket->write(p_packet.toUtf8()); ms_socket->write(p_packet.toUtf8());
} }
} }
@ -81,93 +81,86 @@ void NetworkManager::handle_ms_packet()
QByteArray buffer = ms_socket->readAll(); QByteArray buffer = ms_socket->readAll();
QString in_data = QString::fromUtf8(buffer, buffer.size()); QString in_data = QString::fromUtf8(buffer, buffer.size());
if (!in_data.endsWith("%")) if (!in_data.endsWith("%")) {
{
ms_partial_packet = true; ms_partial_packet = true;
ms_temp_packet += in_data; ms_temp_packet += in_data;
return; return;
} }
else else {
{ if (ms_partial_packet) {
if (ms_partial_packet)
{
in_data = ms_temp_packet + in_data; in_data = ms_temp_packet + in_data;
ms_temp_packet = ""; ms_temp_packet = "";
ms_partial_packet = false; ms_partial_packet = false;
} }
} }
QStringList packet_list = in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts)); QStringList packet_list =
in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts));
for (QString packet : packet_list) for (QString packet : packet_list) {
{
AOPacket *f_packet = new AOPacket(packet); AOPacket *f_packet = new AOPacket(packet);
ao_app->ms_packet_received(f_packet); ao_app->ms_packet_received(f_packet);
} }
} }
void NetworkManager::perform_srv_lookup() void NetworkManager::perform_srv_lookup()
{ {
#ifdef MS_FAILOVER_SUPPORTED #ifdef MS_FAILOVER_SUPPORTED
ms_dns = new QDnsLookup(QDnsLookup::SRV, ms_srv_hostname, this); ms_dns = new QDnsLookup(QDnsLookup::SRV, ms_srv_hostname, this);
connect(ms_dns, SIGNAL(finished()), this, SLOT(on_srv_lookup())); connect(ms_dns, SIGNAL(finished()), this, SLOT(on_srv_lookup()));
ms_dns->lookup(); ms_dns->lookup();
#endif #endif
} }
void NetworkManager::on_srv_lookup() void NetworkManager::on_srv_lookup()
{ {
#ifdef MS_FAILOVER_SUPPORTED #ifdef MS_FAILOVER_SUPPORTED
bool connected = false; bool connected = false;
if (ms_dns->error() != QDnsLookup::NoError) if (ms_dns->error() != QDnsLookup::NoError) {
{
qWarning("SRV lookup of the master server DNS failed."); qWarning("SRV lookup of the master server DNS failed.");
ms_dns->deleteLater(); ms_dns->deleteLater();
} }
else else {
{
const auto srv_records = ms_dns->serviceRecords(); const auto srv_records = ms_dns->serviceRecords();
for (const QDnsServiceRecord &record : srv_records) for (const QDnsServiceRecord &record : srv_records) {
{
#ifdef DEBUG_NETWORK #ifdef DEBUG_NETWORK
qDebug() << "Connecting to " << record.target() << ":" << record.port(); qDebug() << "Connecting to " << record.target() << ":" << record.port();
#endif #endif
ms_socket->connectToHost(record.target(), record.port()); ms_socket->connectToHost(record.target(), record.port());
QTime timer; QTime timer;
timer.start(); timer.start();
do do {
{
ao_app->processEvents(); ao_app->processEvents();
if (ms_socket->state() == QAbstractSocket::ConnectedState) if (ms_socket->state() == QAbstractSocket::ConnectedState) {
{
connected = true; connected = true;
break; break;
} }
else if (ms_socket->state() != QAbstractSocket::ConnectingState else if (ms_socket->state() != QAbstractSocket::ConnectingState &&
&& ms_socket->state() != QAbstractSocket::HostLookupState ms_socket->state() != QAbstractSocket::HostLookupState &&
&& ms_socket->error() != -1) ms_socket->error() != -1) {
{
qDebug() << ms_socket->error(); qDebug() << ms_socket->error();
qWarning() << "Error connecting to master server:" << ms_socket->errorString(); qWarning() << "Error connecting to master server:"
<< ms_socket->errorString();
ms_socket->abort(); ms_socket->abort();
ms_socket->close(); ms_socket->close();
break; break;
} }
} while (timer.elapsed() < timeout_milliseconds); // Very expensive spin-wait loop - it will bring CPU to 100%! } while (timer.elapsed() <
if (connected) timeout_milliseconds); // Very expensive spin-wait loop - it will
{ // bring CPU to 100%!
// Connect a one-shot signal in case the master server disconnects randomly if (connected) {
QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)), // Connect a one-shot signal in case the master server disconnects
this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError))); // randomly
QObject::connect(
ms_socket, SIGNAL(error(QAbstractSocket::SocketError)), this,
SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
break; break;
} }
else else {
{
ms_socket->abort(); ms_socket->abort();
ms_socket->close(); ms_socket->close();
} }
@ -179,29 +172,30 @@ void NetworkManager::on_srv_lookup()
connect_to_master_nosrv(); connect_to_master_nosrv();
else else
emit ms_connect_finished(connected, false); emit ms_connect_finished(connected, false);
#endif #endif
} }
void NetworkManager::on_ms_nosrv_connect_success() void NetworkManager::on_ms_nosrv_connect_success()
{ {
emit ms_connect_finished(true, false); emit ms_connect_finished(true, false);
QObject::disconnect(ms_socket, SIGNAL(connected()), QObject::disconnect(ms_socket, SIGNAL(connected()), this,
this, SLOT(on_ms_nosrv_connect_success())); SLOT(on_ms_nosrv_connect_success()));
QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)), QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)), this,
this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError))); SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
} }
void NetworkManager::on_ms_socket_error(QAbstractSocket::SocketError error) void NetworkManager::on_ms_socket_error(QAbstractSocket::SocketError error)
{ {
qWarning() << "Master server socket error:" << ms_socket->errorString() qWarning() << "Master server socket error:" << ms_socket->errorString() << "("
<< "(" << error << ")"; << error << ")";
// Disconnect the one-shot signal - this way, failover connect attempts // Disconnect the one-shot signal - this way, failover connect attempts
// don't trigger a full retry // don't trigger a full retry
QObject::disconnect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)), QObject::disconnect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError))); this,
SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
emit ms_connect_finished(false, true); emit ms_connect_finished(false, true);
@ -210,7 +204,8 @@ void NetworkManager::on_ms_socket_error(QAbstractSocket::SocketError error)
void NetworkManager::retry_ms_connect() void NetworkManager::retry_ms_connect()
{ {
if (!ms_reconnect_timer->isActive() && ms_socket->state() != QAbstractSocket::ConnectingState) if (!ms_reconnect_timer->isActive() &&
ms_socket->state() != QAbstractSocket::ConnectingState)
connect_to_master(); connect_to_master();
} }
@ -219,27 +214,24 @@ void NetworkManager::handle_server_packet()
QByteArray buffer = server_socket->readAll(); QByteArray buffer = server_socket->readAll();
QString in_data = QString::fromUtf8(buffer, buffer.size()); QString in_data = QString::fromUtf8(buffer, buffer.size());
if (!in_data.endsWith("%")) if (!in_data.endsWith("%")) {
{
partial_packet = true; partial_packet = true;
temp_packet += in_data; temp_packet += in_data;
return; return;
} }
else else {
{ if (partial_packet) {
if (partial_packet)
{
in_data = temp_packet + in_data; in_data = temp_packet + in_data;
temp_packet = ""; temp_packet = "";
partial_packet = false; partial_packet = false;
} }
} }
QStringList packet_list = in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts)); QStringList packet_list =
in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts));
for (QString packet : packet_list) for (QString packet : packet_list) {
{
AOPacket *f_packet = new AOPacket(packet); AOPacket *f_packet = new AOPacket(packet);
ao_app->server_packet_received(f_packet); ao_app->server_packet_received(f_packet);

View File

@ -1,11 +1,11 @@
#include "aoapplication.h" #include "aoapplication.h"
#include "lobby.h"
#include "courtroom.h" #include "courtroom.h"
#include "networkmanager.h" #include "debug_functions.h"
#include "encryption_functions.h" #include "encryption_functions.h"
#include "hardware_functions.h" #include "hardware_functions.h"
#include "debug_functions.h" #include "lobby.h"
#include "networkmanager.h"
void AOApplication::ms_packet_received(AOPacket *p_packet) void AOApplication::ms_packet_received(AOPacket *p_packet)
{ {
@ -19,17 +19,14 @@ void AOApplication::ms_packet_received(AOPacket *p_packet)
qDebug() << "R(ms):" << p_packet->to_string(); qDebug() << "R(ms):" << p_packet->to_string();
#endif #endif
if (header == "ALL") if (header == "ALL") {
{
server_list.clear(); server_list.clear();
for (QString i_string : p_packet->get_contents()) for (QString i_string : p_packet->get_contents()) {
{
server_type f_server; server_type f_server;
QStringList sub_contents = i_string.split("&"); QStringList sub_contents = i_string.split("&");
if (sub_contents.size() < 4) if (sub_contents.size() < 4) {
{
qDebug() << "W: malformed packet"; qDebug() << "W: malformed packet";
continue; continue;
} }
@ -42,39 +39,32 @@ void AOApplication::ms_packet_received(AOPacket *p_packet)
server_list.append(f_server); server_list.append(f_server);
} }
if (lobby_constructed) if (lobby_constructed) {
{
w_lobby->list_servers(); w_lobby->list_servers();
} }
} }
else if (header == "CT") else if (header == "CT") {
{
QString f_name, f_message; QString f_name, f_message;
if (f_contents.size() == 1) if (f_contents.size() == 1) {
{
f_name = ""; f_name = "";
f_message = f_contents.at(0); f_message = f_contents.at(0);
} }
else if (f_contents.size() >= 2) else if (f_contents.size() >= 2) {
{
f_name = f_contents.at(0); f_name = f_contents.at(0);
f_message = f_contents.at(1); f_message = f_contents.at(1);
} }
else else
goto end; goto end;
if (lobby_constructed) if (lobby_constructed) {
{
w_lobby->append_chatmessage(f_name, f_message); w_lobby->append_chatmessage(f_name, f_message);
} }
if (courtroom_constructed && courtroom_loaded) if (courtroom_constructed && courtroom_loaded) {
{
w_courtroom->append_ms_chatmessage(f_name, f_message); w_courtroom->append_ms_chatmessage(f_name, f_message);
} }
} }
else if (header == "AO2CHECK") else if (header == "AO2CHECK") {
{
send_ms_packet(new AOPacket("ID#AO2#" + get_version_string() + "#%")); send_ms_packet(new AOPacket("ID#AO2#" + get_version_string() + "#%"));
send_ms_packet(new AOPacket("HI#" + get_hdid() + "#%")); send_ms_packet(new AOPacket("HI#" + get_hdid() + "#%"));
@ -92,31 +82,28 @@ void AOApplication::ms_packet_received(AOPacket *p_packet)
if (get_release() > f_release) if (get_release() > f_release)
goto end; goto end;
else if (get_release() == f_release) else if (get_release() == f_release) {
{
if (get_major_version() > f_major) if (get_major_version() > f_major)
goto end; goto end;
else if (get_major_version() == f_major) else if (get_major_version() == f_major) {
{
if (get_minor_version() >= f_minor) if (get_minor_version() >= f_minor)
goto end; goto end;
} }
} }
call_notice("Outdated version! Your version: " + get_version_string() call_notice("Outdated version! Your version: " + get_version_string() +
+ "\nPlease go to aceattorneyonline.com to update."); "\nPlease go to aceattorneyonline.com to update.");
destruct_courtroom(); destruct_courtroom();
destruct_lobby(); destruct_lobby();
} }
else if (header == "DOOM") else if (header == "DOOM") {
{
call_notice("You have been exiled from AO." call_notice("You have been exiled from AO."
"Have a nice day."); "Have a nice day.");
destruct_courtroom(); destruct_courtroom();
destruct_lobby(); destruct_lobby();
} }
end: end:
delete p_packet; delete p_packet;
} }
@ -134,15 +121,14 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
qDebug() << "R:" << f_packet; qDebug() << "R:" << f_packet;
#endif #endif
if (header == "decryptor") if (header == "decryptor") {
{
if (f_contents.size() == 0) if (f_contents.size() == 0)
goto end; goto end;
//you may ask where 322 comes from. that would be a good question. // you may ask where 322 comes from. that would be a good question.
s_decryptor = fanta_decrypt(f_contents.at(0), 322).toUInt(); s_decryptor = fanta_decrypt(f_contents.at(0), 322).toUInt();
//default(legacy) values // default(legacy) values
encryption_needed = true; encryption_needed = true;
yellow_text_enabled = false; yellow_text_enabled = false;
prezoom_enabled = false; prezoom_enabled = false;
@ -156,7 +142,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
casing_alerts_enabled = false; casing_alerts_enabled = false;
modcall_reason_enabled = false; modcall_reason_enabled = false;
//workaround for tsuserver4 // workaround for tsuserver4
if (f_contents.at(0) == "NOENCRYPT") if (f_contents.at(0) == "NOENCRYPT")
encryption_needed = false; encryption_needed = false;
@ -166,8 +152,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
AOPacket *hi_packet = new AOPacket("HI#" + f_hdid + "#%"); AOPacket *hi_packet = new AOPacket("HI#" + f_hdid + "#%");
send_server_packet(hi_packet); send_server_packet(hi_packet);
} }
else if (header == "ID") else if (header == "ID") {
{
if (f_contents.size() < 2) if (f_contents.size() < 2)
goto end; goto end;
@ -176,55 +161,53 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
send_server_packet(new AOPacket("ID#AO2#" + get_version_string() + "#%")); send_server_packet(new AOPacket("ID#AO2#" + get_version_string() + "#%"));
} }
else if (header == "CT") else if (header == "CT") {
{
if (f_contents.size() < 2) if (f_contents.size() < 2)
goto end; goto end;
if (courtroom_constructed) if (courtroom_constructed) {
{
if (f_contents.size() == 3) if (f_contents.size() == 3)
w_courtroom->append_server_chatmessage(f_contents.at(0), f_contents.at(1), f_contents.at(2)); w_courtroom->append_server_chatmessage(
f_contents.at(0), f_contents.at(1), f_contents.at(2));
else else
w_courtroom->append_server_chatmessage(f_contents.at(0), f_contents.at(1), "0"); w_courtroom->append_server_chatmessage(f_contents.at(0),
f_contents.at(1), "0");
} }
} }
else if (header == "FL") else if (header == "FL") {
{ if (f_packet.contains("yellowtext", Qt::CaseInsensitive))
if (f_packet.contains("yellowtext",Qt::CaseInsensitive))
yellow_text_enabled = true; yellow_text_enabled = true;
if (f_packet.contains("flipping",Qt::CaseInsensitive)) if (f_packet.contains("flipping", Qt::CaseInsensitive))
flipping_enabled = true; flipping_enabled = true;
if (f_packet.contains("customobjections",Qt::CaseInsensitive)) if (f_packet.contains("customobjections", Qt::CaseInsensitive))
custom_objection_enabled = true; custom_objection_enabled = true;
if (f_packet.contains("fastloading",Qt::CaseInsensitive)) if (f_packet.contains("fastloading", Qt::CaseInsensitive))
improved_loading_enabled = true; improved_loading_enabled = true;
if (f_packet.contains("noencryption",Qt::CaseInsensitive)) if (f_packet.contains("noencryption", Qt::CaseInsensitive))
encryption_needed = false; encryption_needed = false;
if (f_packet.contains("deskmod",Qt::CaseInsensitive)) if (f_packet.contains("deskmod", Qt::CaseInsensitive))
desk_mod_enabled = true; desk_mod_enabled = true;
if (f_packet.contains("evidence",Qt::CaseInsensitive)) if (f_packet.contains("evidence", Qt::CaseInsensitive))
evidence_enabled = true; evidence_enabled = true;
if (f_packet.contains("cccc_ic_support",Qt::CaseInsensitive)) if (f_packet.contains("cccc_ic_support", Qt::CaseInsensitive))
cccc_ic_support_enabled = true; cccc_ic_support_enabled = true;
if (f_packet.contains("arup",Qt::CaseInsensitive)) if (f_packet.contains("arup", Qt::CaseInsensitive))
arup_enabled = true; arup_enabled = true;
if (f_packet.contains("casing_alerts",Qt::CaseInsensitive)) if (f_packet.contains("casing_alerts", Qt::CaseInsensitive))
casing_alerts_enabled = true; casing_alerts_enabled = true;
if (f_packet.contains("modcall_reason",Qt::CaseInsensitive)) if (f_packet.contains("modcall_reason", Qt::CaseInsensitive))
modcall_reason_enabled = true; modcall_reason_enabled = true;
w_lobby->enable_connect_button(); w_lobby->enable_connect_button();
} }
else if (header == "PN") else if (header == "PN") {
{
if (f_contents.size() < 2) if (f_contents.size() < 2)
goto end; goto end;
w_lobby->set_player_count(f_contents.at(0).toInt(), f_contents.at(1).toInt()); w_lobby->set_player_count(f_contents.at(0).toInt(),
f_contents.at(1).toInt());
} }
else if (header == "SI") else if (header == "SI") {
{
if (f_contents.size() != 3) if (f_contents.size() != 3)
goto end; goto end;
@ -249,8 +232,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
int selected_server = w_lobby->get_selected_server(); int selected_server = w_lobby->get_selected_server();
QString server_address = "", server_name = ""; QString server_address = "", server_name = "";
if (w_lobby->public_servers_selected) if (w_lobby->public_servers_selected) {
{
if (selected_server >= 0 && selected_server < server_list.size()) { if (selected_server >= 0 && selected_server < server_list.size()) {
auto info = server_list.at(selected_server); auto info = server_list.at(selected_server);
server_name = info.name; server_name = info.name;
@ -258,8 +240,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
window_title += ": " + server_name; window_title += ": " + server_name;
} }
} }
else else {
{
if (selected_server >= 0 && selected_server < favorite_list.size()) { if (selected_server >= 0 && selected_server < favorite_list.size()) {
auto info = favorite_list.at(selected_server); auto info = favorite_list.at(selected_server);
server_name = info.name; server_name = info.name;
@ -276,7 +257,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
AOPacket *f_packet; AOPacket *f_packet;
if(improved_loading_enabled) if (improved_loading_enabled)
f_packet = new AOPacket("RC#%"); f_packet = new AOPacket("RC#%");
else else
f_packet = new AOPacket("askchar2#%"); f_packet = new AOPacket("askchar2#%");
@ -286,19 +267,19 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
QCryptographicHash hash(QCryptographicHash::Algorithm::Sha256); QCryptographicHash hash(QCryptographicHash::Algorithm::Sha256);
hash.addData(server_address.toUtf8()); hash.addData(server_address.toUtf8());
if (is_discord_enabled()) if (is_discord_enabled())
discord->state_server(server_name.toStdString(), hash.result().toBase64().toStdString()); discord->state_server(server_name.toStdString(),
hash.result().toBase64().toStdString());
} }
else if (header == "CI") else if (header == "CI") {
{
if (!courtroom_constructed) if (!courtroom_constructed)
goto end; goto end;
for (int n_element = 0 ; n_element < f_contents.size() ; n_element += 2) for (int n_element = 0; n_element < f_contents.size(); n_element += 2) {
{
if (f_contents.at(n_element).toInt() != loaded_chars) if (f_contents.at(n_element).toInt() != loaded_chars)
break; break;
//this means we are on the last element and checking n + 1 element will be game over so // this means we are on the last element and checking n + 1 element will
// be game over so
if (n_element == f_contents.size() - 1) if (n_element == f_contents.size() - 1)
break; break;
@ -310,37 +291,40 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
f_char.name = sub_elements.at(0); f_char.name = sub_elements.at(0);
f_char.description = sub_elements.at(1); f_char.description = sub_elements.at(1);
f_char.evidence_string = sub_elements.at(3); f_char.evidence_string = sub_elements.at(3);
//temporary. the CharsCheck packet sets this properly // temporary. the CharsCheck packet sets this properly
f_char.taken = false; f_char.taken = false;
++loaded_chars; ++loaded_chars;
w_lobby->set_loading_text("Loading chars:\n" + QString::number(loaded_chars) + "/" + QString::number(char_list_size)); w_lobby->set_loading_text("Loading chars:\n" +
QString::number(loaded_chars) + "/" +
QString::number(char_list_size));
w_courtroom->append_char(f_char); w_courtroom->append_char(f_char);
int total_loading_size = char_list_size * 2 + evidence_list_size + music_list_size; int total_loading_size =
int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100); char_list_size * 2 + evidence_list_size + music_list_size;
int loading_value = int(
((loaded_chars + generated_chars + loaded_music + loaded_evidence) /
static_cast<double>(total_loading_size)) *
100);
w_lobby->set_loading_value(loading_value); w_lobby->set_loading_value(loading_value);
} }
if (improved_loading_enabled) if (improved_loading_enabled)
send_server_packet(new AOPacket("RE#%")); send_server_packet(new AOPacket("RE#%"));
else else {
{ QString next_packet_number =
QString next_packet_number = QString::number(((loaded_chars - 1) / 10) + 1); QString::number(((loaded_chars - 1) / 10) + 1);
send_server_packet(new AOPacket("AN#" + next_packet_number + "#%")); send_server_packet(new AOPacket("AN#" + next_packet_number + "#%"));
} }
} }
else if (header == "EI") else if (header == "EI") {
{
if (!courtroom_constructed) if (!courtroom_constructed)
goto end; goto end;
// +1 because evidence starts at 1 rather than 0 for whatever reason // +1 because evidence starts at 1 rather than 0 for whatever reason
//enjoy fanta // enjoy fanta
if (f_contents.at(0).toInt() != loaded_evidence + 1) if (f_contents.at(0).toInt() != loaded_evidence + 1)
goto end; goto end;
@ -354,33 +338,36 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
evi_type f_evi; evi_type f_evi;
f_evi.name = sub_elements.at(0); f_evi.name = sub_elements.at(0);
f_evi.description = sub_elements.at(1); f_evi.description = sub_elements.at(1);
//no idea what the number at position 2 is. probably an identifier? // no idea what the number at position 2 is. probably an identifier?
f_evi.image = sub_elements.at(3); f_evi.image = sub_elements.at(3);
++loaded_evidence; ++loaded_evidence;
w_lobby->set_loading_text("Loading evidence:\n" + QString::number(loaded_evidence) + "/" + QString::number(evidence_list_size)); w_lobby->set_loading_text("Loading evidence:\n" +
QString::number(loaded_evidence) + "/" +
QString::number(evidence_list_size));
w_courtroom->append_evidence(f_evi); w_courtroom->append_evidence(f_evi);
int total_loading_size = char_list_size * 2 + evidence_list_size + music_list_size; int total_loading_size =
int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100); char_list_size * 2 + evidence_list_size + music_list_size;
int loading_value =
int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) /
static_cast<double>(total_loading_size)) *
100);
w_lobby->set_loading_value(loading_value); w_lobby->set_loading_value(loading_value);
QString next_packet_number = QString::number(loaded_evidence); QString next_packet_number = QString::number(loaded_evidence);
send_server_packet(new AOPacket("AE#" + next_packet_number + "#%")); send_server_packet(new AOPacket("AE#" + next_packet_number + "#%"));
} }
else if (header == "EM") else if (header == "EM") {
{
if (!courtroom_constructed) if (!courtroom_constructed)
goto end; goto end;
bool musics_time = false; bool musics_time = false;
int areas = 0; int areas = 0;
for (int n_element = 0 ; n_element < f_contents.size() ; n_element += 2) for (int n_element = 0; n_element < f_contents.size(); n_element += 2) {
{
if (f_contents.at(n_element).toInt() != loaded_music) if (f_contents.at(n_element).toInt() != loaded_music)
break; break;
@ -391,52 +378,49 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
++loaded_music; ++loaded_music;
w_lobby->set_loading_text("Loading music:\n" + QString::number(loaded_music) + "/" + QString::number(music_list_size)); w_lobby->set_loading_text("Loading music:\n" +
QString::number(loaded_music) + "/" +
QString::number(music_list_size));
if (musics_time) if (musics_time) {
{
w_courtroom->append_music(f_music); w_courtroom->append_music(f_music);
} }
else else {
{ if (f_music.endsWith(".wav") || f_music.endsWith(".mp3") ||
if (f_music.endsWith(".wav") || f_music.endsWith(".mp4") || f_music.endsWith(".ogg") ||
f_music.endsWith(".mp3") || f_music.endsWith(".opus")) {
f_music.endsWith(".mp4") ||
f_music.endsWith(".ogg") ||
f_music.endsWith(".opus"))
{
musics_time = true; musics_time = true;
areas--; areas--;
w_courtroom->fix_last_area(); w_courtroom->fix_last_area();
w_courtroom->append_music(f_music); w_courtroom->append_music(f_music);
} }
else else {
{
w_courtroom->append_area(f_music); w_courtroom->append_area(f_music);
areas++; areas++;
} }
} }
for (int area_n = 0; area_n < areas; area_n++) for (int area_n = 0; area_n < areas; area_n++) {
{
w_courtroom->arup_append(0, "Unknown", "Unknown", "Unknown"); w_courtroom->arup_append(0, "Unknown", "Unknown", "Unknown");
} }
int total_loading_size = char_list_size * 2 + evidence_list_size + music_list_size; int total_loading_size =
int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100); char_list_size * 2 + evidence_list_size + music_list_size;
int loading_value = int(
((loaded_chars + generated_chars + loaded_music + loaded_evidence) /
static_cast<double>(total_loading_size)) *
100);
w_lobby->set_loading_value(loading_value); w_lobby->set_loading_value(loading_value);
} }
QString next_packet_number = QString::number(((loaded_music - 1) / 10) + 1); QString next_packet_number = QString::number(((loaded_music - 1) / 10) + 1);
send_server_packet(new AOPacket("AM#" + next_packet_number + "#%")); send_server_packet(new AOPacket("AM#" + next_packet_number + "#%"));
} }
else if (header == "CharsCheck") else if (header == "CharsCheck") {
{
if (!courtroom_constructed) if (!courtroom_constructed)
goto end; goto end;
for (int n_char = 0 ; n_char < f_contents.size() ; ++n_char) for (int n_char = 0; n_char < f_contents.size(); ++n_char) {
{
if (f_contents.at(n_char) == "-1") if (f_contents.at(n_char) == "-1")
w_courtroom->set_taken(n_char, true); w_courtroom->set_taken(n_char, true);
else else
@ -444,13 +428,11 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
} }
} }
else if (header == "SC") else if (header == "SC") {
{
if (!courtroom_constructed) if (!courtroom_constructed)
goto end; goto end;
for (int n_element = 0 ; n_element < f_contents.size() ; ++n_element) for (int n_element = 0; n_element < f_contents.size(); ++n_element) {
{
QStringList sub_elements = f_contents.at(n_element).split("&"); QStringList sub_elements = f_contents.at(n_element).split("&");
char_type f_char; char_type f_char;
@ -458,74 +440,78 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (sub_elements.size() >= 2) if (sub_elements.size() >= 2)
f_char.description = sub_elements.at(1); f_char.description = sub_elements.at(1);
//temporary. the CharsCheck packet sets this properly // temporary. the CharsCheck packet sets this properly
f_char.taken = false; f_char.taken = false;
++loaded_chars; ++loaded_chars;
w_lobby->set_loading_text("Loading chars:\n" + QString::number(loaded_chars) + "/" + QString::number(char_list_size)); w_lobby->set_loading_text("Loading chars:\n" +
QString::number(loaded_chars) + "/" +
QString::number(char_list_size));
w_courtroom->append_char(f_char); w_courtroom->append_char(f_char);
int total_loading_size = char_list_size * 2 + evidence_list_size + music_list_size; int total_loading_size =
int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100); char_list_size * 2 + evidence_list_size + music_list_size;
int loading_value = int(
((loaded_chars + generated_chars + loaded_music + loaded_evidence) /
static_cast<double>(total_loading_size)) *
100);
w_lobby->set_loading_value(loading_value); w_lobby->set_loading_value(loading_value);
} }
send_server_packet(new AOPacket("RM#%")); send_server_packet(new AOPacket("RM#%"));
} }
else if (header == "SM") else if (header == "SM") {
{
if (!courtroom_constructed) if (!courtroom_constructed)
goto end; goto end;
bool musics_time = false; bool musics_time = false;
int areas = 0; int areas = 0;
for (int n_element = 0 ; n_element < f_contents.size() ; ++n_element) for (int n_element = 0; n_element < f_contents.size(); ++n_element) {
{
++loaded_music; ++loaded_music;
w_lobby->set_loading_text("Loading music:\n" + QString::number(loaded_music) + "/" + QString::number(music_list_size)); w_lobby->set_loading_text("Loading music:\n" +
QString::number(loaded_music) + "/" +
QString::number(music_list_size));
if (musics_time) if (musics_time) {
{
w_courtroom->append_music(f_contents.at(n_element)); w_courtroom->append_music(f_contents.at(n_element));
} }
else else {
{
if (f_contents.at(n_element).endsWith(".wav") || if (f_contents.at(n_element).endsWith(".wav") ||
f_contents.at(n_element).endsWith(".mp3") || f_contents.at(n_element).endsWith(".mp3") ||
f_contents.at(n_element).endsWith(".mp4") || f_contents.at(n_element).endsWith(".mp4") ||
f_contents.at(n_element).endsWith(".ogg") || f_contents.at(n_element).endsWith(".ogg") ||
f_contents.at(n_element).endsWith(".opus")) f_contents.at(n_element).endsWith(".opus")) {
{
musics_time = true; musics_time = true;
w_courtroom->fix_last_area(); w_courtroom->fix_last_area();
w_courtroom->append_music(f_contents.at(n_element)); w_courtroom->append_music(f_contents.at(n_element));
areas--; areas--;
} }
else else {
{
w_courtroom->append_area(f_contents.at(n_element)); w_courtroom->append_area(f_contents.at(n_element));
areas++; areas++;
} }
} }
for (int area_n = 0; area_n < areas; area_n++) for (int area_n = 0; area_n < areas; area_n++) {
{
w_courtroom->arup_append(0, "Unknown", "Unknown", "Unknown"); w_courtroom->arup_append(0, "Unknown", "Unknown", "Unknown");
} }
int total_loading_size = char_list_size * 2 + evidence_list_size + music_list_size; int total_loading_size =
int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100); char_list_size * 2 + evidence_list_size + music_list_size;
int loading_value = int(
((loaded_chars + generated_chars + loaded_music + loaded_evidence) /
static_cast<double>(total_loading_size)) *
100);
w_lobby->set_loading_value(loading_value); w_lobby->set_loading_value(loading_value);
} }
send_server_packet(new AOPacket("RD#%")); send_server_packet(new AOPacket("RD#%"));
} }
else if (header == "DONE") else if (header == "DONE") {
{
if (!courtroom_constructed) if (!courtroom_constructed)
goto end; goto end;
@ -539,39 +525,33 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
destruct_lobby(); destruct_lobby();
} }
else if (header == "BN") else if (header == "BN") {
{
if (f_contents.size() < 1) if (f_contents.size() < 1)
goto end; goto end;
if (courtroom_constructed) if (courtroom_constructed)
w_courtroom->set_background(f_contents.at(0)); w_courtroom->set_background(f_contents.at(0));
} }
//server accepting char request(CC) packet // server accepting char request(CC) packet
else if (header == "PV") else if (header == "PV") {
{
if (f_contents.size() < 3) if (f_contents.size() < 3)
goto end; goto end;
if (courtroom_constructed) if (courtroom_constructed)
w_courtroom->enter_courtroom(f_contents.at(2).toInt()); w_courtroom->enter_courtroom(f_contents.at(2).toInt());
} }
else if (header == "MS") else if (header == "MS") {
{
if (courtroom_constructed && courtroom_loaded) if (courtroom_constructed && courtroom_loaded)
w_courtroom->handle_chatmessage(&p_packet->get_contents()); w_courtroom->handle_chatmessage(&p_packet->get_contents());
} }
else if (header == "MC") else if (header == "MC") {
{
if (courtroom_constructed && courtroom_loaded) if (courtroom_constructed && courtroom_loaded)
w_courtroom->handle_song(&p_packet->get_contents()); w_courtroom->handle_song(&p_packet->get_contents());
} }
else if (header == "RT") else if (header == "RT") {
{
if (f_contents.size() < 1) if (f_contents.size() < 1)
goto end; goto end;
if (courtroom_constructed) if (courtroom_constructed) {
{
if (f_contents.size() == 1) if (f_contents.size() == 1)
w_courtroom->handle_wtce(f_contents.at(0), 0); w_courtroom->handle_wtce(f_contents.at(0), 0);
else if (f_contents.size() == 2) { else if (f_contents.size() == 2) {
@ -579,19 +559,16 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
} }
} }
} }
else if (header == "HP") else if (header == "HP") {
{
if (courtroom_constructed && f_contents.size() > 1) if (courtroom_constructed && f_contents.size() > 1)
w_courtroom->set_hp_bar(f_contents.at(0).toInt(), f_contents.at(1).toInt()); w_courtroom->set_hp_bar(f_contents.at(0).toInt(),
f_contents.at(1).toInt());
} }
else if (header == "LE") else if (header == "LE") {
{ if (courtroom_constructed) {
if (courtroom_constructed)
{
QVector<evi_type> f_evi_list; QVector<evi_type> f_evi_list;
for (QString f_string : f_contents) for (QString f_string : f_contents) {
{
QStringList sub_contents = f_string.split("&"); QStringList sub_contents = f_string.split("&");
if (sub_contents.size() < 3) if (sub_contents.size() < 3)
@ -608,67 +585,59 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
w_courtroom->set_evidence_list(f_evi_list); w_courtroom->set_evidence_list(f_evi_list);
} }
} }
else if (header == "ARUP") else if (header == "ARUP") {
{ if (courtroom_constructed) {
if (courtroom_constructed)
{
int arup_type = f_contents.at(0).toInt(); int arup_type = f_contents.at(0).toInt();
for (int n_element = 1 ; n_element < f_contents.size() ; n_element++) for (int n_element = 1; n_element < f_contents.size(); n_element++) {
{ w_courtroom->arup_modify(arup_type, n_element - 1,
w_courtroom->arup_modify(arup_type, n_element - 1, f_contents.at(n_element)); f_contents.at(n_element));
} }
} }
} }
else if (header == "IL") else if (header == "IL") {
{
if (courtroom_constructed && f_contents.size() > 0) if (courtroom_constructed && f_contents.size() > 0)
w_courtroom->set_ip_list(f_contents.at(0)); w_courtroom->set_ip_list(f_contents.at(0));
} }
else if (header == "MU") else if (header == "MU") {
{
if (courtroom_constructed && f_contents.size() > 0) if (courtroom_constructed && f_contents.size() > 0)
w_courtroom->set_mute(true, f_contents.at(0).toInt()); w_courtroom->set_mute(true, f_contents.at(0).toInt());
} }
else if (header == "UM") else if (header == "UM") {
{
if (courtroom_constructed && f_contents.size() > 0) if (courtroom_constructed && f_contents.size() > 0)
w_courtroom->set_mute(false, f_contents.at(0).toInt()); w_courtroom->set_mute(false, f_contents.at(0).toInt());
} }
else if (header == "KK") else if (header == "KK") {
{ if (courtroom_constructed && f_contents.size() >= 1) {
if (courtroom_constructed && f_contents.size() >= 1) call_notice("You have been kicked from the server.\nReason: " +
{ f_contents.at(0));
call_notice("You have been kicked from the server.\nReason: " + f_contents.at(0));
construct_lobby(); construct_lobby();
destruct_courtroom(); destruct_courtroom();
} }
} }
else if (header == "KB") else if (header == "KB") {
{ if (courtroom_constructed && f_contents.size() >= 1) {
if (courtroom_constructed && f_contents.size() >= 1) call_notice("You have been banned from the server.\nReason: " +
{ f_contents.at(0));
call_notice("You have been banned from the server.\nReason: " + f_contents.at(0));
construct_lobby(); construct_lobby();
destruct_courtroom(); destruct_courtroom();
} }
} }
else if (header == "BD") else if (header == "BD") {
{
call_notice("You are banned on this server.\nReason: " + f_contents.at(0)); call_notice("You are banned on this server.\nReason: " + f_contents.at(0));
} }
else if (header == "ZZ") else if (header == "ZZ") {
{
if (courtroom_constructed && f_contents.size() > 0) if (courtroom_constructed && f_contents.size() > 0)
w_courtroom->mod_called(f_contents.at(0)); w_courtroom->mod_called(f_contents.at(0));
} }
else if (header == "CASEA") else if (header == "CASEA") {
{
if (courtroom_constructed && f_contents.size() > 6) if (courtroom_constructed && f_contents.size() > 6)
w_courtroom->case_called(f_contents.at(0), f_contents.at(1) == "1", f_contents.at(2) == "1", f_contents.at(3) == "1", f_contents.at(4) == "1", f_contents.at(5) == "1"); w_courtroom->case_called(f_contents.at(0), f_contents.at(1) == "1",
f_contents.at(2) == "1", f_contents.at(3) == "1",
f_contents.at(4) == "1",
f_contents.at(5) == "1");
} }
end: end:
delete p_packet; delete p_packet;
} }
@ -695,8 +664,7 @@ void AOApplication::send_server_packet(AOPacket *p_packet, bool encoded)
QString f_packet = p_packet->to_string(); QString f_packet = p_packet->to_string();
if (encryption_needed) if (encryption_needed) {
{
#ifdef DEBUG_NETWORK #ifdef DEBUG_NETWORK
qDebug() << "S(e):" << f_packet; qDebug() << "S(e):" << f_packet;
#endif #endif
@ -704,8 +672,7 @@ void AOApplication::send_server_packet(AOPacket *p_packet, bool encoded)
p_packet->encrypt_header(s_decryptor); p_packet->encrypt_header(s_decryptor);
f_packet = p_packet->to_string(); f_packet = p_packet->to_string();
} }
else else {
{
#ifdef DEBUG_NETWORK #ifdef DEBUG_NETWORK
qDebug() << "S:" << f_packet; qDebug() << "S:" << f_packet;
#endif #endif

View File

@ -3,18 +3,18 @@
#include "file_functions.h" #include "file_functions.h"
#include <QDir> #include <QDir>
#include <QStandardPaths>
#include <QRegExp> #include <QRegExp>
#include <QStandardPaths>
#ifdef BASE_OVERRIDE #ifdef BASE_OVERRIDE
#include "base_override.h" #include "base_override.h"
#endif #endif
//this is a quite broad generalization // this is a quite broad generalization
//the most common OSes(mac and windows) are _usually_ case insensitive // the most common OSes(mac and windows) are _usually_ case insensitive
//however, there do exist mac installations with case sensitive filesystems // however, there do exist mac installations with case sensitive filesystems
//in that case, define CASE_SENSITIVE_FILESYSTEM and compile on a mac // in that case, define CASE_SENSITIVE_FILESYSTEM and compile on a mac
#if (defined (LINUX) || defined (__linux__)) #if (defined(LINUX) || defined(__linux__))
#define CASE_SENSITIVE_FILESYSTEM #define CASE_SENSITIVE_FILESYSTEM
#endif #endif
@ -23,7 +23,7 @@ QString AOApplication::get_base_path()
QString base_path = ""; QString base_path = "";
#ifdef ANDROID #ifdef ANDROID
QString sdcard_storage = getenv("SECONDARY_STORAGE"); QString sdcard_storage = getenv("SECONDARY_STORAGE");
if (dir_exists(sdcard_storage + "/AO2/")){ if (dir_exists(sdcard_storage + "/AO2/")) {
base_path = sdcard_storage + "/AO2/"; base_path = sdcard_storage + "/AO2/";
} }
else { else {
@ -37,10 +37,7 @@ QString AOApplication::get_base_path()
return base_path; return base_path;
} }
QString AOApplication::get_data_path() QString AOApplication::get_data_path() { return get_base_path() + "data/"; }
{
return get_base_path() + "data/";
}
QString AOApplication::get_default_theme_path(QString p_file) QString AOApplication::get_default_theme_path(QString p_file)
{ {
@ -104,7 +101,8 @@ QString AOApplication::get_music_path(QString p_song)
QString AOApplication::get_background_path(QString p_file) QString AOApplication::get_background_path(QString p_file)
{ {
QString path = get_base_path() + "background/" + w_courtroom->get_current_background() + "/" + p_file; QString path = get_base_path() + "background/" +
w_courtroom->get_current_background() + "/" + p_file;
if (courtroom_constructed) { if (courtroom_constructed) {
#ifndef CASE_SENSITIVE_FILESYSTEM #ifndef CASE_SENSITIVE_FILESYSTEM
return path; return path;
@ -135,21 +133,25 @@ QString AOApplication::get_evidence_path(QString p_file)
#endif #endif
} }
QString AOApplication::get_case_sensitive_path(QString p_file) { QString AOApplication::get_case_sensitive_path(QString p_file)
//first, check to see if it's actually there (also serves as base case for recursion) {
if (exists(p_file)) return p_file; // first, check to see if it's actually there (also serves as base case for
// recursion)
if (exists(p_file))
return p_file;
QFileInfo file(p_file); QFileInfo file(p_file);
QString file_basename = file.fileName(); QString file_basename = file.fileName();
QString file_parent_dir = get_case_sensitive_path(file.absolutePath()); QString file_parent_dir = get_case_sensitive_path(file.absolutePath());
//second, does it exist in the new parent dir? // second, does it exist in the new parent dir?
if (exists(file_parent_dir + "/" + file_basename)) if (exists(file_parent_dir + "/" + file_basename))
return file_parent_dir + "/" + file_basename; return file_parent_dir + "/" + file_basename;
//last resort, dirlist parent dir and find case insensitive match // last resort, dirlist parent dir and find case insensitive match
QRegExp file_rx = QRegExp(file_basename, Qt::CaseInsensitive, QRegExp::FixedString); QRegExp file_rx =
QRegExp(file_basename, Qt::CaseInsensitive, QRegExp::FixedString);
QStringList files = QDir(file_parent_dir).entryList(); QStringList files = QDir(file_parent_dir).entryList();
int result = files.indexOf(file_rx); int result = files.indexOf(file_rx);
@ -157,6 +159,6 @@ QString AOApplication::get_case_sensitive_path(QString p_file) {
if (result != -1) if (result != -1)
return file_parent_dir + "/" + files.at(result); return file_parent_dir + "/" + files.at(result);
//if nothing is found, let the caller handle the missing file // if nothing is found, let the caller handle the missing file
return file_parent_dir + "/" + file_basename; return file_parent_dir + "/" + file_basename;
} }

View File

@ -48,13 +48,15 @@ int AOApplication::get_max_log_size()
bool AOApplication::get_log_goes_downwards() bool AOApplication::get_log_goes_downwards()
{ {
QString result = configini->value("log_goes_downwards", "false").value<QString>(); QString result =
configini->value("log_goes_downwards", "false").value<QString>();
return result.startsWith("true"); return result.startsWith("true");
} }
bool AOApplication::get_showname_enabled_by_default() bool AOApplication::get_showname_enabled_by_default()
{ {
QString result = configini->value("show_custom_shownames", "true").value<QString>(); QString result =
configini->value("show_custom_shownames", "true").value<QString>();
return result.startsWith("true"); return result.startsWith("true");
} }
@ -69,7 +71,8 @@ QString AOApplication::get_default_username()
QString AOApplication::get_audio_output_device() QString AOApplication::get_audio_output_device()
{ {
QString result = configini->value("default_audio_device", "default").value<QString>(); QString result =
configini->value("default_audio_device", "default").value<QString>();
return result; return result;
} }
@ -86,8 +89,7 @@ QStringList AOApplication::get_call_words()
QTextStream in(&callwords_ini); QTextStream in(&callwords_ini);
while (!in.atEnd()) while (!in.atEnd()) {
{
QString line = in.readLine(); QString line = in.readLine();
return_value.append(line); return_value.append(line);
} }
@ -102,8 +104,7 @@ void AOApplication::write_to_serverlist_txt(QString p_line)
serverlist_txt.setFileName(serverlist_txt_path); serverlist_txt.setFileName(serverlist_txt_path);
if (!serverlist_txt.open(QIODevice::WriteOnly | QIODevice::Append)) if (!serverlist_txt.open(QIODevice::WriteOnly | QIODevice::Append)) {
{
return; return;
} }
@ -123,15 +124,13 @@ QVector<server_type> AOApplication::read_serverlist_txt()
serverlist_txt.setFileName(serverlist_txt_path); serverlist_txt.setFileName(serverlist_txt_path);
if (!serverlist_txt.open(QIODevice::ReadOnly)) if (!serverlist_txt.open(QIODevice::ReadOnly)) {
{
return f_server_list; return f_server_list;
} }
QTextStream in(&serverlist_txt); QTextStream in(&serverlist_txt);
while(!in.atEnd()) while (!in.atEnd()) {
{
QString line = in.readLine(); QString line = in.readLine();
server_type f_server; server_type f_server;
QStringList line_contents = line.split(":"); QStringList line_contents = line.split(":");
@ -150,13 +149,15 @@ QVector<server_type> AOApplication::read_serverlist_txt()
return f_server_list; return f_server_list;
} }
QString AOApplication::read_design_ini(QString p_identifier, QString p_design_path) QString AOApplication::read_design_ini(QString p_identifier,
QString p_design_path)
{ {
QSettings settings(p_design_path, QSettings::IniFormat); QSettings settings(p_design_path, QSettings::IniFormat);
QVariant value = settings.value(p_identifier); QVariant value = settings.value(p_identifier);
if (value.type() == QVariant::StringList) { if (value.type() == QVariant::StringList) {
return value.toStringList().join(","); return value.toStringList().join(",");
} else { }
else {
return value.toString(); return value.toString();
} }
} }
@ -172,8 +173,7 @@ QPoint AOApplication::get_button_spacing(QString p_identifier, QString p_file)
return_value.setX(0); return_value.setX(0);
return_value.setY(0); return_value.setY(0);
if (f_result == "") if (f_result == "") {
{
f_result = read_design_ini(p_identifier, default_path); f_result = read_design_ini(p_identifier, default_path);
if (f_result == "") if (f_result == "")
@ -191,7 +191,8 @@ QPoint AOApplication::get_button_spacing(QString p_identifier, QString p_file)
return return_value; return return_value;
} }
pos_size_type AOApplication::get_element_dimensions(QString p_identifier, QString p_file) pos_size_type AOApplication::get_element_dimensions(QString p_identifier,
QString p_file)
{ {
QString design_ini_path = get_theme_path(p_file); QString design_ini_path = get_theme_path(p_file);
QString default_path = get_default_theme_path(p_file); QString default_path = get_default_theme_path(p_file);
@ -204,8 +205,7 @@ pos_size_type AOApplication::get_element_dimensions(QString p_identifier, QStrin
return_value.width = -1; return_value.width = -1;
return_value.height = -1; return_value.height = -1;
if (f_result == "") if (f_result == "") {
{
f_result = read_design_ini(p_identifier, default_path); f_result = read_design_ini(p_identifier, default_path);
if (f_result == "") if (f_result == "")
@ -229,8 +229,7 @@ QString AOApplication::get_font_name(QString p_identifier, QString p_file)
QString design_ini_path = get_theme_path(p_file); QString design_ini_path = get_theme_path(p_file);
QString f_result = read_design_ini(p_identifier, design_ini_path); QString f_result = read_design_ini(p_identifier, design_ini_path);
QString default_path = get_default_theme_path(p_file); QString default_path = get_default_theme_path(p_file);
if (f_result == "") if (f_result == "") {
{
f_result = read_design_ini(p_identifier, default_path); f_result = read_design_ini(p_identifier, default_path);
if (f_result == "") if (f_result == "")
return "Sans"; return "Sans";
@ -243,8 +242,7 @@ int AOApplication::get_font_size(QString p_identifier, QString p_file)
QString default_path = get_default_theme_path(p_file); QString default_path = get_default_theme_path(p_file);
QString f_result = read_design_ini(p_identifier, design_ini_path); QString f_result = read_design_ini(p_identifier, design_ini_path);
if (f_result == "") if (f_result == "") {
{
f_result = read_design_ini(p_identifier, default_path); f_result = read_design_ini(p_identifier, default_path);
if (f_result == "") if (f_result == "")
@ -262,8 +260,7 @@ QColor AOApplication::get_color(QString p_identifier, QString p_file)
QColor return_color(0, 0, 0); QColor return_color(0, 0, 0);
if (f_result == "") if (f_result == "") {
{
f_result = read_design_ini(p_identifier, default_path); f_result = read_design_ini(p_identifier, default_path);
if (f_result == "") if (f_result == "")
@ -286,12 +283,10 @@ QColor AOApplication::get_chat_color(QString p_identifier, QString p_chat)
{ {
QColor return_color(255, 255, 255); QColor return_color(255, 255, 255);
if (p_identifier == "_inline_grey") if (p_identifier == "_inline_grey") {
{
return_color = QColor(187, 187, 187); return_color = QColor(187, 187, 187);
} }
else else {
{
switch (p_identifier.toInt()) { switch (p_identifier.toInt()) {
case 1: case 1:
return_color = QColor(0, 255, 0); return_color = QColor(0, 255, 0);
@ -327,8 +322,7 @@ QColor AOApplication::get_chat_color(QString p_identifier, QString p_chat)
QString default_path = get_base_path() + "misc/default/config.ini"; QString default_path = get_base_path() + "misc/default/config.ini";
QString f_result = read_design_ini(p_identifier, design_ini_path); QString f_result = read_design_ini(p_identifier, design_ini_path);
if (f_result == "") if (f_result == "") {
{
f_result = read_design_ini(p_identifier, default_path); f_result = read_design_ini(p_identifier, default_path);
if (f_result == "") if (f_result == "")
@ -355,8 +349,7 @@ QString AOApplication::get_sfx(QString p_identifier)
QString return_sfx = ""; QString return_sfx = "";
if (f_result == "") if (f_result == "") {
{
f_result = read_design_ini(p_identifier, default_path); f_result = read_design_ini(p_identifier, default_path);
if (f_result == "") if (f_result == "")
@ -372,12 +365,10 @@ QString AOApplication::get_sfx_suffix(QString sound_to_check)
{ {
QString mp3_check = get_sounds_path(sound_to_check + ".mp3"); QString mp3_check = get_sounds_path(sound_to_check + ".mp3");
QString opus_check = get_sounds_path(sound_to_check + ".opus"); QString opus_check = get_sounds_path(sound_to_check + ".opus");
if (file_exists(opus_check)) if (file_exists(opus_check)) {
{
return sound_to_check + ".opus"; return sound_to_check + ".opus";
} }
else if (file_exists(mp3_check)) else if (file_exists(mp3_check)) {
{
return sound_to_check + ".mp3"; return sound_to_check + ".mp3";
} }
return sound_to_check + ".wav"; return sound_to_check + ".wav";
@ -386,19 +377,20 @@ QString AOApplication::get_sfx_suffix(QString sound_to_check)
QString AOApplication::get_image_suffix(QString path_to_check) QString AOApplication::get_image_suffix(QString path_to_check)
{ {
QString apng_check = path_to_check + ".apng"; QString apng_check = path_to_check + ".apng";
if (file_exists(apng_check)) if (file_exists(apng_check)) {
{
return apng_check; return apng_check;
} }
return path_to_check + ".gif"; return path_to_check + ".gif";
} }
// returns whatever is to the right of "search_line =" within target_tag and
//returns whatever is to the right of "search_line =" within target_tag and terminator_tag, trimmed // terminator_tag, trimmed returns the empty string if the search line couldnt
//returns the empty string if the search line couldnt be found // be found
QString AOApplication::read_char_ini(QString p_char, QString p_search_line, QString target_tag) QString AOApplication::read_char_ini(QString p_char, QString p_search_line,
QString target_tag)
{ {
QSettings settings(get_character_path(p_char, "char.ini"), QSettings::IniFormat); QSettings settings(get_character_path(p_char, "char.ini"),
QSettings::IniFormat);
settings.beginGroup(target_tag); settings.beginGroup(target_tag);
QString value = settings.value(p_search_line).toString(); QString value = settings.value(p_search_line).toString();
settings.endGroup(); settings.endGroup();
@ -411,7 +403,8 @@ QString AOApplication::get_char_name(QString p_char)
if (f_result == "") if (f_result == "")
return p_char; return p_char;
else return f_result; else
return f_result;
} }
QString AOApplication::get_showname(QString p_char) QString AOApplication::get_showname(QString p_char)
@ -423,7 +416,8 @@ QString AOApplication::get_showname(QString p_char)
return ""; return "";
if (f_result == "") if (f_result == "")
return p_char; return p_char;
else return f_result; else
return f_result;
} }
QString AOApplication::get_char_side(QString p_char) QString AOApplication::get_char_side(QString p_char)
@ -432,7 +426,8 @@ QString AOApplication::get_char_side(QString p_char)
if (f_result == "") if (f_result == "")
return "wit"; return "wit";
else return f_result; else
return f_result;
} }
QString AOApplication::get_gender(QString p_char) QString AOApplication::get_gender(QString p_char)
@ -441,14 +436,16 @@ QString AOApplication::get_gender(QString p_char)
if (f_result == "") if (f_result == "")
return "male"; return "male";
else return f_result; else
return f_result;
} }
QString AOApplication::get_chat(QString p_char) QString AOApplication::get_chat(QString p_char)
{ {
QString f_result = read_char_ini(p_char, "chat", "Options"); QString f_result = read_char_ini(p_char, "chat", "Options");
//handling the correct order of chat is a bit complicated, we let the caller do it // handling the correct order of chat is a bit complicated, we let the caller
// do it
return f_result; return f_result;
} }
@ -457,7 +454,8 @@ QString AOApplication::get_char_shouts(QString p_char)
QString f_result = read_char_ini(p_char, "shouts", "Options"); QString f_result = read_char_ini(p_char, "shouts", "Options");
if (f_result == "") if (f_result == "")
return "default"; return "default";
else return f_result; else
return f_result;
} }
int AOApplication::get_preanim_duration(QString p_char, QString p_emote) int AOApplication::get_preanim_duration(QString p_char, QString p_emote)
@ -466,7 +464,8 @@ int AOApplication::get_preanim_duration(QString p_char, QString p_emote)
if (f_result == "") if (f_result == "")
return -1; return -1;
else return f_result.toInt(); else
return f_result.toInt();
} }
int AOApplication::get_ao2_preanim_duration(QString p_char, QString p_emote) int AOApplication::get_ao2_preanim_duration(QString p_char, QString p_emote)
@ -475,7 +474,8 @@ int AOApplication::get_ao2_preanim_duration(QString p_char, QString p_emote)
if (f_result == "") if (f_result == "")
return -1; return -1;
else return f_result.toInt(); else
return f_result.toInt();
} }
int AOApplication::get_emote_number(QString p_char) int AOApplication::get_emote_number(QString p_char)
@ -484,68 +484,75 @@ int AOApplication::get_emote_number(QString p_char)
if (f_result == "") if (f_result == "")
return 0; return 0;
else return f_result.toInt(); else
return f_result.toInt();
} }
QString AOApplication::get_emote_comment(QString p_char, int p_emote) QString AOApplication::get_emote_comment(QString p_char, int p_emote)
{ {
QString f_result = read_char_ini(p_char, QString::number(p_emote + 1), "Emotions"); QString f_result =
read_char_ini(p_char, QString::number(p_emote + 1), "Emotions");
QStringList result_contents = f_result.split("#"); QStringList result_contents = f_result.split("#");
if (result_contents.size() < 4) if (result_contents.size() < 4) {
{
qDebug() << "W: misformatted char.ini: " << p_char << ", " << p_emote; qDebug() << "W: misformatted char.ini: " << p_char << ", " << p_emote;
return "normal"; return "normal";
} }
else return result_contents.at(0); else
return result_contents.at(0);
} }
QString AOApplication::get_pre_emote(QString p_char, int p_emote) QString AOApplication::get_pre_emote(QString p_char, int p_emote)
{ {
QString f_result = read_char_ini(p_char, QString::number(p_emote + 1), "Emotions"); QString f_result =
read_char_ini(p_char, QString::number(p_emote + 1), "Emotions");
QStringList result_contents = f_result.split("#"); QStringList result_contents = f_result.split("#");
if (result_contents.size() < 4) if (result_contents.size() < 4) {
{
qDebug() << "W: misformatted char.ini: " << p_char << ", " << p_emote; qDebug() << "W: misformatted char.ini: " << p_char << ", " << p_emote;
return ""; return "";
} }
else return result_contents.at(1); else
return result_contents.at(1);
} }
QString AOApplication::get_emote(QString p_char, int p_emote) QString AOApplication::get_emote(QString p_char, int p_emote)
{ {
QString f_result = read_char_ini(p_char, QString::number(p_emote + 1), "Emotions"); QString f_result =
read_char_ini(p_char, QString::number(p_emote + 1), "Emotions");
QStringList result_contents = f_result.split("#"); QStringList result_contents = f_result.split("#");
if (result_contents.size() < 4) if (result_contents.size() < 4) {
{
qDebug() << "W: misformatted char.ini: " << p_char << ", " << p_emote; qDebug() << "W: misformatted char.ini: " << p_char << ", " << p_emote;
return "normal"; return "normal";
} }
else return result_contents.at(2); else
return result_contents.at(2);
} }
int AOApplication::get_emote_mod(QString p_char, int p_emote) int AOApplication::get_emote_mod(QString p_char, int p_emote)
{ {
QString f_result = read_char_ini(p_char, QString::number(p_emote + 1), "Emotions"); QString f_result =
read_char_ini(p_char, QString::number(p_emote + 1), "Emotions");
QStringList result_contents = f_result.split("#"); QStringList result_contents = f_result.split("#");
if (result_contents.size() < 4) if (result_contents.size() < 4) {
{ qDebug() << "W: misformatted char.ini: " << p_char << ", "
qDebug() << "W: misformatted char.ini: " << p_char << ", " << QString::number(p_emote); << QString::number(p_emote);
return 0; return 0;
} }
else return result_contents.at(3).toInt(); else
return result_contents.at(3).toInt();
} }
int AOApplication::get_desk_mod(QString p_char, int p_emote) int AOApplication::get_desk_mod(QString p_char, int p_emote)
{ {
QString f_result = read_char_ini(p_char, QString::number(p_emote + 1), "Emotions"); QString f_result =
read_char_ini(p_char, QString::number(p_emote + 1), "Emotions");
QStringList result_contents = f_result.split("#"); QStringList result_contents = f_result.split("#");
@ -556,25 +563,30 @@ int AOApplication::get_desk_mod(QString p_char, int p_emote)
if (string_result == "") if (string_result == "")
return -1; return -1;
else return string_result.toInt(); else
return string_result.toInt();
} }
QString AOApplication::get_sfx_name(QString p_char, int p_emote) QString AOApplication::get_sfx_name(QString p_char, int p_emote)
{ {
QString f_result = read_char_ini(p_char, QString::number(p_emote + 1), "SoundN"); QString f_result =
read_char_ini(p_char, QString::number(p_emote + 1), "SoundN");
if (f_result == "") if (f_result == "")
return "1"; return "1";
else return f_result; else
return f_result;
} }
int AOApplication::get_sfx_delay(QString p_char, int p_emote) int AOApplication::get_sfx_delay(QString p_char, int p_emote)
{ {
QString f_result = read_char_ini(p_char, QString::number(p_emote + 1), "SoundT"); QString f_result =
read_char_ini(p_char, QString::number(p_emote + 1), "SoundT");
if (f_result == "") if (f_result == "")
return 1; return 1;
else return f_result.toInt(); else
return f_result.toInt();
} }
int AOApplication::get_text_delay(QString p_char, QString p_emote) int AOApplication::get_text_delay(QString p_char, QString p_emote)
@ -583,7 +595,8 @@ int AOApplication::get_text_delay(QString p_char, QString p_emote)
if (f_result == "") if (f_result == "")
return -1; return -1;
else return f_result.toInt(); else
return f_result.toInt();
} }
QString AOApplication::get_custom_realization(QString p_char) QString AOApplication::get_custom_realization(QString p_char)
@ -592,7 +605,8 @@ QString AOApplication::get_custom_realization(QString p_char)
if (f_result == "") if (f_result == "")
return get_sfx("realization"); return get_sfx("realization");
else return f_result; else
return f_result;
} }
bool AOApplication::get_blank_blip() bool AOApplication::get_blank_blip()
@ -615,42 +629,50 @@ bool AOApplication::get_casing_enabled()
bool AOApplication::get_casing_defence_enabled() bool AOApplication::get_casing_defence_enabled()
{ {
QString result = configini->value("casing_defence_enabled", "false").value<QString>(); QString result =
configini->value("casing_defence_enabled", "false").value<QString>();
return result.startsWith("true"); return result.startsWith("true");
} }
bool AOApplication::get_casing_prosecution_enabled() bool AOApplication::get_casing_prosecution_enabled()
{ {
QString result = configini->value("casing_prosecution_enabled", "false").value<QString>(); QString result =
configini->value("casing_prosecution_enabled", "false").value<QString>();
return result.startsWith("true"); return result.startsWith("true");
} }
bool AOApplication::get_casing_judge_enabled() bool AOApplication::get_casing_judge_enabled()
{ {
QString result = configini->value("casing_judge_enabled", "false").value<QString>(); QString result =
configini->value("casing_judge_enabled", "false").value<QString>();
return result.startsWith("true"); return result.startsWith("true");
} }
bool AOApplication::get_casing_juror_enabled() bool AOApplication::get_casing_juror_enabled()
{ {
QString result = configini->value("casing_juror_enabled", "false").value<QString>(); QString result =
configini->value("casing_juror_enabled", "false").value<QString>();
return result.startsWith("true"); return result.startsWith("true");
} }
bool AOApplication::get_casing_steno_enabled() bool AOApplication::get_casing_steno_enabled()
{ {
QString result = configini->value("casing_steno_enabled", "false").value<QString>(); QString result =
configini->value("casing_steno_enabled", "false").value<QString>();
return result.startsWith("true"); return result.startsWith("true");
} }
bool AOApplication::get_casing_cm_enabled() bool AOApplication::get_casing_cm_enabled()
{ {
QString result = configini->value("casing_cm_enabled", "false").value<QString>(); QString result =
configini->value("casing_cm_enabled", "false").value<QString>();
return result.startsWith("true"); return result.startsWith("true");
} }
QString AOApplication::get_casing_can_host_cases() QString AOApplication::get_casing_can_host_cases()
{ {
QString result = configini->value("casing_can_host_cases", "Turnabout Check Your Settings").value<QString>(); QString result =
configini->value("casing_can_host_cases", "Turnabout Check Your Settings")
.value<QString>();
return result; return result;
} }