1 /* 2 * Copyright © 2004-2010 Jens Oknelid, paskharen@gmail.com 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 * 18 * In addition, as a special exception, compiling, linking, and/or 19 * using OpenSSL with this program is allowed. 20 */ 21 22 #pragma once 23 24 #include <dcpp/stdinc.h> 25 #include <dcpp/ConnectionManager.h> 26 #include <dcpp/DownloadManager.h> 27 #include <dcpp/LogManager.h> 28 #include <dcpp/QueueManager.h> 29 #include <dcpp/TimerManager.h> 30 #include <dcpp/UploadManager.h> 31 #include <dcpp/FavoriteManager.h> 32 #include "entry.hh" 33 #include "treeview.hh" 34 #include "transfers.hh" 35 #include "message.hh" 36 #include "notify.hh" 37 38 class BookEntry; 39 class Search; 40 41 class MainWindow: 42 public Entry, 43 public dcpp::LogManagerListener, 44 public dcpp::QueueManagerListener, 45 public dcpp::TimerManagerListener 46 { 47 public: 48 MainWindow(); 49 ~MainWindow(); 50 51 // Inherited from Entry 52 GtkWidget *getContainer(); 53 54 // GUI functions 55 void show(); 56 void setTitle(const std::string& text); 57 void setUrgent_gui(); 58 bool isActive_gui(); 59 void removeBookEntry_gui(BookEntry *entry); 60 GtkWidget *currentPage_gui(); 61 void raisePage_gui(GtkWidget *page); 62 static bool getUserCommandLines_gui(const std::string &command, dcpp::StringMap &ucParams); 63 void propertiesMagnetDialog_gui(std::string magnet); 64 void showMessageDialog_gui(const std::string primaryText, const std::string secondaryText); 65 void showDownloadQueue_gui(); 66 void showFavoriteHubs_gui(); 67 void showFavoriteUsers_gui(); 68 void showFinishedDownloads_gui(); 69 void showFinishedUploads_gui(); 70 void showHub_gui(std::string address, std::string encoding = ""); 71 void showSearchSpy_gui(); 72 void showSearchADL_gui(); 73 void showCmdDebug_gui(); 74 void showUploadQueue_gui(); 75 void addPrivateMessage_gui(Msg::TypeMsg typemsg, std::string cid, std::string hubUrl = "", std::string message = "", bool useSetting = FALSE); 76 void addPrivateStatusMessage_gui(Msg::TypeMsg typemsg, std::string cid, std::string message = ""); 77 void showPublicHubs_gui(); 78 void showShareBrowser_gui(dcpp::UserPtr user, std::string file, std::string dir, bool useSetting); 79 Search *addSearch_gui(); 80 void addSearch_gui(std::string magnet); 81 void actionMagnet_gui(std::string magnet); 82 void setMainStatus_gui(std::string text, time_t t = time(NULL)); 83 void showNotification_gui(std::string head, std::string body, Notify::TypeNotify notify); 84 GtkWidget* getChooserDialog_gui(); 85 void fileToDownload_gui(std::string magnet, std::string path); 86 void parsePartial_gui(dcpp::HintedUser aUser, std::string txt); 87 88 // Client functions 89 void openOwnList_client(bool useSetting); 90 void matchAllList_client(); 91 void updateFavoriteHubMenu_client(const dcpp::FavoriteHubEntryList &fh); 92 93 private: 94 typedef std::pair<std::string, std::string> ParamPair; 95 typedef std::vector<ParamPair> ListParamPair; 96 97 // GUI functions 98 void loadIcons_gui(); 99 void showTransfersPane_gui(); 100 void autoOpen_gui(); 101 void addTabMenuItem_gui(GtkWidget* menuItem, GtkWidget* page); 102 void removeTabMenuItem_gui(GtkWidget *menuItem); 103 void addBookEntry_gui(BookEntry *entry); 104 void previousTab_gui(); 105 void nextTab_gui(); 106 void onSwitchOnPage_gui(int pageNum); 107 BookEntry *findBookEntry(const EntryType type, const std::string &id = ""); 108 void createStatusIcon_gui(); 109 void updateStatusIconTooltip_gui(std::string download, std::string upload); 110 void setStats_gui(std::string hubs, std::string downloadSpeed, 111 std::string downloaded, std::string uploadSpeed, std::string uploaded); 112 void setToolbarButton_gui(); 113 void setTabPosition_gui(int position); 114 void setToolbarStyle_gui(int style); 115 void removeTimerSource_gui(); 116 void setChooseMagnetDialog_gui(); 117 void showMagnetDialog_gui(const std::string &magnet, const std::string &name, const int64_t size, 118 const std::string &tth); 119 void showPortsError(const std::string& port); 120 void setToolbarMenu_gui(const std::string &item_key, const std::string &button_key, const std::string &key); 121 void updateFavoriteHubMenu_gui(ListParamPair list); 122 void checkToolbarMenu_gui(); 123 void updateFreespaceBar_gui(std::string freespace, float freepercent); 124 125 // GUI Callbacks 126 static gboolean onWindowState_gui(GtkWidget *widget, GdkEventWindowState *event, gpointer data); 127 static gboolean onFocusIn_gui(GtkWidget *widget, GdkEventFocus *event, gpointer data); 128 static gboolean onCloseWindow_gui(GtkWidget *widget, GdkEvent *event, gpointer data); 129 static gboolean onKeyPressed_gui(GtkWidget *widget, GdkEventKey *event, gpointer data); 130 static gboolean onButtonReleasePage_gui(GtkWidget *widget, GdkEventButton *event, gpointer data); 131 static gboolean animationStatusIcon_gui(gpointer data); 132 static void onRaisePage_gui(GtkMenuItem *item, gpointer data); 133 static void onPageSwitched_gui(GtkNotebook *notebook, GtkNotebook *page, guint num, gpointer data); 134 static void onPaneRealized_gui(GtkWidget *pane, gpointer data); 135 static void onConnectClicked_gui(GtkWidget *widget, gpointer data); 136 static void onFavoriteHubsClicked_gui(GtkWidget *widget, gpointer data); 137 static void onFavoriteUsersClicked_gui(GtkWidget *widget, gpointer data); 138 static void onPublicHubsClicked_gui(GtkWidget *widget, gpointer data); 139 static void onPreferencesClicked_gui(GtkWidget *widget, gpointer data); 140 static void onHashClicked_gui(GtkWidget *widget, gpointer data); 141 static void onSearchClicked_gui(GtkWidget *widget, gpointer data); 142 static void onSearchADLClicked_gui(GtkWidget *widget, gpointer data); 143 static void onSearchSpyClicked_gui(GtkWidget *widget, gpointer data); 144 static void onDownloadQueueClicked_gui(GtkWidget *widget, gpointer data); 145 static void onFinishedDownloadsClicked_gui(GtkWidget *widget, gpointer data); 146 static void onFinishedUploadsClicked_gui(GtkWidget *widget, gpointer data); 147 static void onQuitClicked_gui(GtkWidget *widget, gpointer data); 148 static void onOpenFileListClicked_gui(GtkWidget *widget, gpointer data); 149 static void onOpenOwnListClicked_gui(GtkWidget *widget, gpointer data); 150 static void onMatchAllList_gui(GtkWidget *widget, gpointer data); 151 static void onRefreshFileListClicked_gui(GtkWidget *widget, gpointer data); 152 static void onReconnectClicked_gui(GtkWidget *widget, gpointer data); 153 static void onCloseClicked_gui(GtkWidget *widget, gpointer data); 154 static void onPreviousTabClicked_gui(GtkWidget* widget, gpointer data); 155 static void onNextTabClicked_gui(GtkWidget* widget, gpointer data); 156 static void onAboutClicked_gui(GtkWidget *widget, gpointer data); 157 //static void onAboutDialogActivateLink_gui(GtkAboutDialog *dialog, const gchar *link, gpointer data); 158 static void onCloseBookEntry_gui(GtkWidget *widget, gpointer data); 159 static void onStatusIconActivated_gui(GtkStatusIcon *statusIcon, gpointer data); 160 static void onStatusIconPopupMenu_gui(GtkStatusIcon *statusIcon, guint button, guint time, gpointer data); 161 static void onStatusIconBlinkUseToggled_gui(GtkWidget *widget, gpointer data); 162 static void onShowInterfaceToggled_gui(GtkCheckMenuItem *item, gpointer data); 163 static void onLinkClicked_gui(GtkWidget *widget, gpointer data); 164 static void onTransferToggled_gui(GtkWidget *widget, gpointer data); 165 static void onBrowseMagnetButton_gui(GtkWidget *widget, gpointer data); 166 static void onDowloadQueueToggled_gui(GtkWidget *widget, gpointer data); 167 static void onSearchMagnetToggled_gui(GtkWidget *widget, gpointer data); 168 static void onSetMagnetChoiceDialog_gui(GtkWidget *widget, gpointer data); 169 static void onResponseMagnetDialog_gui(GtkWidget *dialog, gint response, gpointer data); 170 static gboolean onDeleteEventMagnetDialog_gui(GtkWidget *dialog, GdkEvent *event, gpointer data); 171 static gboolean onMenuButtonClicked_gui(GtkWidget *widget, gpointer data); 172 static gboolean onAddButtonClicked_gui(GtkWidget *widget, gpointer data); 173 static void menuPosition_gui(GtkMenu *menu, gint *x, gint *y, gboolean *push, gpointer data); 174 static void onToolToggled_gui(GtkWidget *widget, gpointer data); 175 static void onTopToolbarToggled_gui(GtkWidget *widget, gpointer data); 176 static void onLeftToolbarToggled_gui(GtkWidget *widget, gpointer data); 177 static void onHideToolbarToggled_gui(GtkWidget *widget, gpointer data); 178 static void onSizeToolbarToggled_gui(GtkWidget *widget, gpointer data); 179 static void onHubClicked_gui(GtkWidget *widget, gpointer data); 180 static void onTTHFileDialog_gui(GtkWidget *widget, gpointer data); 181 static void onTTHFileButton_gui(GtkWidget *widget, gpointer data); 182 static void onDebugCMD(GtkWidget *widget, gpointer data); 183 static void onFreeSpaceBar(GtkWidget *widget, gpointer data); 184 static void onUploadQueueClicked_gui(GtkWidget *widget, gpointer data); 185 /**/ 186 static void onCloseAllHub_gui(GtkWidget *widget, gpointer data); 187 static void onCloseAllPM_gui(GtkWidget *widget, gpointer data); 188 static void onCloseAllSearch_gui(GtkWidget *widget, gpointer data); 189 static void onCloseAlloffPM_gui(GtkWidget *widget, gpointer data); 190 static void onReconectAllHub_gui(GtkWidget *widget, gpointer data); 191 192 // Client functions 193 void autoConnect_client(); 194 void startSocket_client(bool changed); 195 void refreshFileList_client(); 196 void addFileDownloadQueue_client(std::string name, int64_t size, std::string tth); 197 198 // Client callbacks 199 virtual void on(dcpp::LogManagerListener::Message, time_t t, const std::string &m) noexcept; 200 virtual void on(dcpp::QueueManagerListener::Finished, dcpp::QueueItem *item, const std::string& dir, int64_t avSpeed) noexcept; 201 virtual void on(dcpp::TimerManagerListener::Second, uint64_t ticks) noexcept; 202 virtual void on(dcpp::QueueManagerListener::PartialList, const dcpp::HintedUser& aUser, const std::string& text) noexcept; 203 204 GtkWindow *window; 205 Transfers* transfers; 206 GtkStatusIcon *statusIcon; 207 int64_t lastUpdate, lastUp, lastDown; 208 bool minimized; 209 dcpp::StringList EntryList; 210 guint timer; 211 int statusFrame; 212 bool useStatusIconBlink; 213 bool onQuit; 214 int ToolbarStyle; 215 }; 216