void MyFrame::OnTopic( wxCommandEvent& WXUNUSED(event) ) { if (GetTopic()->GetStringSelection() == wxT("...")) { wxString s = wxGetTextFromUser(wxT("Specify the name of the topic"), wxT("Topic Name"), wxEmptyString, this); if (!s.IsEmpty() && s != IPC_TOPIC) { GetTopic()->Insert(s, 0); GetTopic()->SetSelection(0); } } }
// go to a selected link void HelpViewer::showLink(String const &link) { Topic t = GetTopic(link); if(!IsNull(t.text)) { Zoom zoom; zoom.m = 160; zoom.d = 1000; String label = t.label; RichText txt = ParseQTF(t.text); contentsPane.Pick(txt, zoom); contentsPane.GotoLabel(label, true); int tocId = mainTocTree.Find(link); if(tocId >= 0) { // disable tocTree action on selecting cursor // otherwise we've got a recursive call mainTocTree.WhenSel.Clear(); mainTocTree.SetCursor(tocId); // re-enable tocTree action mainTocTree.WhenSel = THISBACK(tocLinkCb); // setup window title Title(mainTocTree.GetValue()); } } }
void MyFrame::EnableControls() { GetStart()->Enable(m_client == NULL); GetServername()->Enable(m_client == NULL); GetHostname()->Enable(m_client == NULL); GetTopic()->Enable(m_client == NULL); const bool isConnected = (m_client != NULL && m_client->IsConnected()); GetDisconnect()->Enable(m_client != NULL && isConnected); GetStartAdvise()->Enable(m_client != NULL && isConnected); GetStopAdvise()->Enable(m_client != NULL && isConnected); GetExecute()->Enable(m_client != NULL && isConnected); GetPoke()->Enable(m_client != NULL && isConnected); GetRequest()->Enable(m_client != NULL && isConnected); }
AboutDlg() { Size isz = MakeLogo(*this, ctrl); int cx = min(isz.cx * 2, GetWorkArea().GetWidth()); SetRect(0, 0, cx, isz.cy); about.SetQTF(GetTopic("ide/app/About$en-us"), Zoom(DPI(120), 1024)); about.SetZoom(Zoom(1, 1)); about.RightPos(0, cx - isz.cx - DPI(1)).VSizePos(); about.HMargins(Zx(4)); about.SetFrame(NullFrame()); about.NoLazy(); Background(PaintRect(ColorDisplay(), SColorPaper())); Add(about); // separator.Color(Gray()); // Add(separator.RightPos(cx - isz.cx, DPI(1)).VSizePos()); Title("About TheIDE"); }
int GetTopicPid(char *classified_topic) { Topic *tp; int slot; char context[CF_MAXVARSIZE], name[CF_MAXVARSIZE]; name[0] = '\0'; DeClassifyTopic(classified_topic, name, context); slot = GetHash(ToLowerStr(name)); if ((tp = GetTopic(TOPICHASH[slot], classified_topic))) { return tp->id; } return 0; }
void MyFrame::OnStart(wxCommandEvent& WXUNUSED(event)) { // Connect to the client wxString servername = GetServername()->GetStringSelection(); wxString hostname = GetHostname()->GetStringSelection(); wxString topic = GetTopic()->GetStringSelection(); m_client = new MyClient; bool retval = m_client->Connect(hostname, servername, topic); wxLogMessage(wxT("Client host=\"%s\" port=\"%s\" topic=\"%s\" %s"), hostname.c_str(), servername.c_str(), topic.c_str(), retval ? wxT("connected") : wxT("failed to connect")); if (!retval) { wxDELETE(m_client); } EnableControls(); }
// Define my frame constructor MyFrame::MyFrame(wxFrame *frame, const wxString& title) : wxFrame(frame, wxID_ANY, title, wxDefaultPosition, wxSize(400, 300)) { // Give it an icon SetIcon(wxICON(sample)); // Make a menubar wxMenu *file_menu = new wxMenu; file_menu->Append(wxID_EXIT, wxT("&Quit\tCtrl-Q")); wxMenuBar *menu_bar = new wxMenuBar; menu_bar->Append(file_menu, wxT("&File")); // Associate the menu bar with the frame SetMenuBar(menu_bar); // set a dialog background SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); // add the controls to the frame wxString strs4[] = { IPC_SERVICE, wxT("...") }; wxString strs5[] = { IPC_HOST, wxT("...") }; wxString strs6[] = { IPC_TOPIC, wxT("...") }; wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL ); wxBoxSizer *item1 = new wxBoxSizer( wxHORIZONTAL ); wxGridSizer *item2 = new wxGridSizer( 4, 0, 0 ); wxButton *item3 = new wxButton( this, ID_START, wxT("Connect to server"), wxDefaultPosition, wxDefaultSize, 0 ); item2->Add( item3, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); wxChoice *item5 = new wxChoice( this, ID_HOSTNAME, wxDefaultPosition, wxSize(100,-1), 2, strs5, 0 ); item2->Add( item5, 0, wxALIGN_CENTER|wxALL, 5 ); wxChoice *item4 = new wxChoice( this, ID_SERVERNAME, wxDefaultPosition, wxSize(100,-1), 2, strs4, 0 ); item2->Add( item4, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); wxChoice *item6 = new wxChoice( this, ID_TOPIC, wxDefaultPosition, wxSize(100,-1), 2, strs6, 0 ); item2->Add( item6, 0, wxALIGN_CENTER|wxALL, 5 ); wxButton *item7 = new wxButton( this, ID_DISCONNECT, wxT("Disconnect "), wxDefaultPosition, wxDefaultSize, 0 ); item2->Add( item7, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); wxButton *item8 = new wxButton( this, ID_STARTADVISE, wxT("StartAdvise"), wxDefaultPosition, wxDefaultSize, 0 ); item2->Add( item8, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); wxButton *item9 = new wxButton( this, ID_STOPADVISE, wxT("StopAdvise"), wxDefaultPosition, wxDefaultSize, 0 ); item2->Add( item9, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); wxButton *item10 = new wxButton( this, ID_EXECUTE, wxT("Execute"), wxDefaultPosition, wxDefaultSize, 0 ); item2->Add( item10, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); wxButton *item11 = new wxButton( this, ID_POKE, wxT("Poke"), wxDefaultPosition, wxDefaultSize, 0 ); item2->Add( item11, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); wxButton *item12 = new wxButton( this, ID_REQUEST, wxT("Request"), wxDefaultPosition, wxDefaultSize, 0 ); item2->Add( item12, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 ); item1->Add( item2, 1, wxALIGN_CENTER|wxALL, 5 ); item0->Add( item1, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); wxStaticBox *item14 = new wxStaticBox( this, -1, wxT("Client log") ); wxStaticBoxSizer *item13 = new wxStaticBoxSizer( item14, wxVERTICAL ); wxTextCtrl *item15 = new wxTextCtrl( this, ID_LOG, wxEmptyString, wxDefaultPosition, wxSize(500,140), wxTE_MULTILINE ); item13->Add( item15, 1, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); item0->Add( item13, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); this->SetSizer( item0 ); item0->SetSizeHints( this ); // status m_client = NULL; GetServername()->SetSelection(0); GetHostname()->SetSelection(0); GetTopic()->SetSelection(0); wxLogTextCtrl *logWindow = new wxLogTextCtrl(GetLog()); delete wxLog::SetActiveTarget(logWindow); wxLogMessage(wxT("Click on Connect to connect to the server")); EnableControls(); }
void CChan::JoinUser(bool bForce, const CString& sKey, CClient* pClient) { if (!bForce && (!IsOn() || !IsDetached())) { m_pNetwork->PutIRC("JOIN " + GetName() + " " + ((sKey.empty()) ? GetKey() : sKey)); SetDetached(false); return; } m_pNetwork->PutUser(":" + m_pNetwork->GetIRCNick().GetNickMask() + " JOIN :" + GetName(), pClient); if (!GetTopic().empty()) { m_pNetwork->PutUser(":" + m_pNetwork->GetIRCServer() + " 332 " + m_pNetwork->GetIRCNick().GetNick() + " " + GetName() + " :" + GetTopic(), pClient); m_pNetwork->PutUser(":" + m_pNetwork->GetIRCServer() + " 333 " + m_pNetwork->GetIRCNick().GetNick() + " " + GetName() + " " + GetTopicOwner() + " " + CString(GetTopicDate()), pClient); } CString sPre = ":" + m_pNetwork->GetIRCServer() + " 353 " + m_pNetwork->GetIRCNick().GetNick() + " " + GetModeForNames() + " " + GetName() + " :"; CString sLine = sPre; CString sPerm, sNick; vector<CClient*>& vpClients = m_pNetwork->GetClients(); for (vector<CClient*>::iterator it = vpClients.begin(); it != vpClients.end(); ++it) { CClient* pThisClient; if (!pClient) pThisClient = *it; else pThisClient = pClient; for (map<CString,CNick>::iterator a = m_msNicks.begin(); a != m_msNicks.end(); ++a) { if (pThisClient->HasNamesx()) { sPerm = a->second.GetPermStr(); } else { char c = a->second.GetPermChar(); sPerm = ""; if (c != '\0') { sPerm += c; } } if (pThisClient->HasUHNames() && !a->second.GetIdent().empty() && !a->second.GetHost().empty()) { sNick = a->first + "!" + a->second.GetIdent() + "@" + a->second.GetHost(); } else { sNick = a->first; } sLine += sPerm + sNick; if (sLine.size() >= 490 || a == (--m_msNicks.end())) { m_pNetwork->PutUser(sLine, pThisClient); sLine = sPre; } else { sLine += " "; } } if (pClient) // We only want to do this for one client break; } m_pNetwork->PutUser(":" + m_pNetwork->GetIRCServer() + " 366 " + m_pNetwork->GetIRCNick().GetNick() + " " + GetName() + " :End of /NAMES list.", pClient); m_bDetached = false; // Send Buffer SendBuffer(pClient); }
NAMESPACE_UPP Topic HelpWindow::AcquireTopic(const String& topic) { return GetTopic(topic); }
// Parses TOC and fills tocTree control bool HelpViewer::LoadTOC(String const &tocLink) { // TOC is composed by QTF lines with a TOC link and label text // lines not containing the TOC link are simply ignored // TOC level is represented by number of TABS contained // inside a line; zero tabs means toplevel, id 0 of tocTree Vector<int>ids; ids.Add(0); int curLevel = 0; int curId = 0; TreeCtrl tocTree; Topic t = GetTopic(tocLink); if(IsNull(t.text)) return false; String label = t.label; String topic = t.link; // sets toc root string from topic ticle tocTree.SetRoot(Null, t.title); // converts QTF to RichTxt, easier to analyze RichText txt = ParseQTF(t.text); // extract all paragraphs from RichTxt, skip other objects for(int iPart = 0; iPart < txt.GetPartCount(); iPart++) { String tocLine; String lineLink; if(!txt.IsPara(iPart)) continue; RichPara p = txt.Get(iPart); for(int iParaPart = 0; iParaPart < p.GetCount(); iParaPart++) { RichPara::Part ¶Part = p.part[iParaPart]; if(paraPart.format.link != "") lineLink = paraPart.format.link; if(paraPart.NonText()) continue; tocLine += paraPart.text.ToString(); } // if part contains no text nor link to topic stuffs, simply skip it if(tocLine == "" || lineLink == "" || !lineLink.StartsWith("topic:")) continue; // now we should count tabls to get TOC indent level int level = 0; int j; while( (j = tocLine.Find(0x09)) >= 0) { level++; tocLine.Remove(j); } // allows just SINGLE UPPER level change, i.e., deeper ONE level from current // for each step; backleveling is possible at any depth if(level > curLevel+1) return false; if(level > curLevel) { ids.Add(curId); curLevel++; } else while(curLevel > level) { curLevel--; ids.Pop(); } // add the line to correct tree node curId = tocTree.Add(ids.Top(), Null, Value(lineLink), Value(tocLine)); } // if the tree control is non empty, appends it to the main TOC TreeCtrl if(tocTree.GetChildCount(0)) AppendTOC(tocTree); // opens all content tree and display first item mainTocTree.OpenDeep(0); mainTocTree.SetCursor(2); // stores first topic at top of stack String curLink = mainTocTree.Get(); stack.Clear(); stack.Add(curLink); tos = 0; return true; }
String GetText(const char *s) { return GetTopic(s).text; }