Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package texteditor;
- import com.trolltech.qt.core.QByteArray;
- import com.trolltech.qt.core.QIODevice;
- import com.trolltech.qt.core.QRegExp;
- import com.trolltech.qt.core.QSize;
- import com.trolltech.qt.core.Qt.Orientation;
- import com.trolltech.qt.gui.QAction;
- import com.trolltech.qt.gui.QApplication;
- import com.trolltech.qt.gui.QDialog;
- import com.trolltech.qt.gui.QHBoxLayout;
- import com.trolltech.qt.gui.QIcon;
- import com.trolltech.qt.gui.QLabel;
- import com.trolltech.qt.gui.QLineEdit;
- import com.trolltech.qt.gui.QListWidget;
- import com.trolltech.qt.gui.QPushButton;
- import com.trolltech.qt.gui.QSlider;
- import com.trolltech.qt.gui.QSplitter;
- import com.trolltech.qt.gui.QStyle;
- import com.trolltech.qt.gui.QStyleOptionTab.TabPosition;
- import com.trolltech.qt.gui.QTabWidget;
- import com.trolltech.qt.gui.QTextBrowser;
- import com.trolltech.qt.gui.QTextEdit;
- import com.trolltech.qt.gui.QTextTable;
- import com.trolltech.qt.gui.QTextTableFormat;
- import com.trolltech.qt.gui.QToolBar;
- import com.trolltech.qt.gui.QVBoxLayout;
- import com.trolltech.qt.gui.QWidget;
- import com.trolltech.qt.network.QTcpSocket;
- import java.util.ArrayList;
- import java.util.List;
- /**
- *
- * @author thomas
- */
- public class IRC extends QWidget {
- private QTcpSocket socket;
- private String server;
- private int port;
- private String password;
- private String nickname;
- private IRCSettingsDialog settingsDialog;
- private QSplitter splSplitter;
- private Chat serverChat;
- private QLabel labServer;
- private QLabel labPort;
- private QToolBar tlbToolbar;
- private QVBoxLayout layMain;
- private QVBoxLayout layRight;
- private QHBoxLayout layLeft;
- private QHBoxLayout layBottom;
- private QWidget wgtRight;
- private QWidget wgtLeft;
- private QWidget wgtBottom;
- private QTabWidget twgtChats;
- private QPushButton btnConnect;
- private QPushButton btnDisconnect;
- private QPushButton btnSend;
- private QPushButton btnSettings;
- private QLineEdit txtInput;
- private QLineEdit txtServer;
- private QLineEdit txtPort;
- private ArrayList<Chat> txtChats = new ArrayList<Chat>();
- private QAction actConnect;
- private QAction actDisconnect;
- public IRC() {
- socket = new QTcpSocket();
- twgtChats = new QTabWidget();
- server = "irc.mozilla.org";
- port = 6667;
- password = "sdasdkad21";
- nickname = "Nipplermoo";
- tlbToolbar = new QToolBar();
- tlbToolbar.setFloatable(false);
- tlbToolbar.setMovable(false);
- tlbToolbar.setIconSize(new QSize(16, 16));
- actConnect = new QAction(getIcon("/connect.png"), tr("Connect"), this);
- actConnect.triggered.connect(this, "connect()");
- actDisconnect = new QAction(getIcon("/disconnect.png"), tr("Disconnect"), this);
- actDisconnect.triggered.connect(this, "disconnectServer()");
- actDisconnect.setEnabled(false);
- tlbToolbar.addAction(actConnect);
- tlbToolbar.addAction(actDisconnect);
- labServer = new QLabel("Server");
- labPort = new QLabel("Port");
- wgtRight = new QWidget();
- wgtLeft = new QWidget();
- wgtBottom = new QWidget();
- txtInput = new QLineEdit();
- txtInput.returnPressed.connect(this, "chatSend()");
- txtServer = new QLineEdit(server);
- txtPort = new QLineEdit(port + "");
- btnSend = new QPushButton("Send");
- btnSend.clicked.connect(this, "chatSend()");
- layMain = new QVBoxLayout();
- layMain.setMargin(0);
- layRight = new QVBoxLayout();
- layRight.setMargin(0);
- layLeft = new QHBoxLayout();
- layLeft.setMargin(0);
- layBottom = new QHBoxLayout();
- layBottom.setMargin(0);
- wgtRight.setLayout(layRight);
- wgtLeft.setLayout(layLeft);
- wgtBottom.setLayout(layBottom);
- wgtBottom.setFixedHeight(32);
- layRight.addWidget(new QListWidget());
- layLeft.addWidget(twgtChats);
- layBottom.addWidget(txtInput);
- layBottom.addWidget(btnSend);
- splSplitter = new QSplitter(Orientation.Horizontal);
- splSplitter.addWidget(wgtLeft);
- splSplitter.addWidget(wgtRight);
- ArrayList<Integer> sizes = new ArrayList<Integer>();
- sizes.add(1000);
- sizes.add(200);
- splSplitter.setSizes(sizes);
- layMain.addWidget(tlbToolbar);
- layMain.addWidget(splSplitter);
- layMain.addWidget(wgtBottom);
- setLayout(layMain);
- show();
- resize(768, 320);
- serverChat = addChat("Server");
- }
- private Chat addChat(String title) {
- Chat chat = new Chat(title);
- twgtChats.addTab(chat, title);
- txtChats.add(chat);
- twgtChats.setCurrentWidget(chat);
- return chat;
- }
- private Chat getActiveChat() {
- return (Chat) twgtChats.currentWidget();
- }
- public void connect() {
- txtServer.setDisabled(true);
- txtPort.setDisabled(true);
- labServer.setDisabled(true);
- labPort.setDisabled(true);
- actConnect.setDisabled(true);
- actDisconnect.setEnabled(true);
- getActiveChat().addLine("Connecting to " + server + ":" + port);
- server = txtServer.text();
- port = Integer.parseInt(txtPort.text());
- socket.connectToHost("irc.quakenet.org", 6667, new QIODevice.OpenMode(QIODevice.OpenModeFlag.ReadWrite));
- socket.connected.connect(this, "connected()");
- socket.disconnected.connect(this, "disconnected()");
- socket.readyRead.connect(this, "read()");
- socket.error.connect(this, "error()");
- }
- private void promtJoin() {
- }
- private void disconnectServer() {
- }
- private void connected () {
- getActiveChat().addLine("CONNECTED TO HOST!");
- send("PASS " + password);
- send("NICK " + nickname);
- send("USER guest 0 * :Mooper32");
- }
- private void error() {
- getActiveChat().addLine("ERROR! Something fucked up!");
- }
- private void send (String str) {
- QByteArray bytes = new QByteArray(str);
- socket.write(bytes.append("\r\n"));
- getActiveChat().addLine(bytes.toString());
- }
- private void disconnected () {
- getActiveChat().addLine("Disconnected :C");
- }
- private void read () {
- while (!socket.atEnd()) {
- processMessage(socket.readLine().toString());
- }
- }
- private void processMessage(String msg) {
- serverChat.addLine(msg);
- if (msg.startsWith("PING :")) {
- serverChat.addLine("I GOT A PING!");
- send("PONG :" + msg.substring(6));
- return;
- }
- // Run through messages by code
- String[] msgs = msg.split(" ");
- if (msgs.length <= 1) return;
- // On channel start / namelist
- if (msgs[1].matches("353")) {
- if (!chatIsOpen(msgs[4])) {
- addChat(msgs[4]);
- }
- for (int i=5; i<msgs.length; i++) {
- getChat(msgs[4]).addUser(msgs[i]);
- System.out.println("adding user " + msgs[i]);
- }
- }
- // Message Reveiced from some other user
- if (msgs[1].matches("PRIVMSG")) {
- if (!chatIsOpen(msgs[2])) {
- addChat(msgs[2]);
- }
- }
- }
- private Chat getChat(String name) {
- for (Chat chat : txtChats) {
- if (name.matches(chat.getName())) {
- return chat;
- }
- }
- return null;
- }
- private boolean chatIsOpen(String name) {
- for (Chat chat : txtChats) {
- if (name.matches(chat.getName())) {
- return true;
- }
- }
- return false;
- }
- private void chatSend() {
- if (txtInput.text().length() == 0) return;
- if (txtInput.text().startsWith("/")) {
- send(txtInput.text().substring(1));
- } else {
- send("PRIVMSG " + getActiveChat().getName() + " " + txtInput.text());
- }
- txtInput.clear();
- }
- public static void main(String[] args) {
- QApplication.initialize(args);
- IRC irc = new IRC();
- QApplication.exec();
- }
- private void showSettings() {
- if (settingsDialog == null) {
- settingsDialog = new IRCSettingsDialog(this);
- }
- settingsDialog.show();
- }
- private QIcon getIcon(String filename) {
- return new QIcon("icons/" + filename);
- }
- }
- class IRCSettingsDialog extends QDialog {
- IRC parent;
- public IRCSettingsDialog(IRC irc) {
- parent = irc;
- }
- }
- class Chat extends QTextEdit {
- private String name;
- private ArrayList<String> users = new ArrayList<String>();
- public Chat (String name) {
- this.name = name;
- show();
- setFontFamily("Courier New");
- document().contentsChanged.connect(this, "scrollDown()");
- }
- private void scrollDown() {
- scroll(0, 0);
- }
- public String getName() {
- return name;
- }
- public void addLine(String line) {
- append(line.replaceAll("\n", "").replaceAll("\r", ""));
- }
- public void addUser(String name) {
- users.add(name);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement