void JXDisplayMenu::BuildMenu() { RemoveAllItems(); JXApplication* app = JXGetApplication(); const JSize count = app->GetDisplayCount(); for (JIndex i=1; i<=count; i++) { JXDisplay* display = app->GetDisplay(i); AppendItem(display->GetName(), kRadioType); } ShowSeparatorAfter(count); AppendItem(kNewDisplayStr); itsNewDisplayIndex = count+1; SetUpdateAction(kDisableNone); const JBoolean found = (JXGetApplication())->GetDisplayIndex(GetDisplay(), &itsDisplayIndex); assert( found ); ListenTo(this); ListenTo( (JXGetApplication())->GetDisplayList() ); }
void JXPathHistoryMenu::UpdateMenu() { if (GetFirstIndex() == 1) { JMountPointList list(JPtrArrayT::kDeleteAll); time_t t; if (JGetUserMountPointList(&list, &t)) { const JSize count = list.GetElementCount(); SetFirstIndex(count+1); for (JIndex i=count; i>=1; i--) { const JMountPoint mp = list.GetElement(i); PrependItem(*(mp.path)); if (i == count) { ShowSeparatorAfter(1); } if (mp.type == kJHardDisk) { SetItemImage(1, jx_hard_disk_small); } else if (mp.type == kJZipDisk) { SetItemImage(1, jx_zip_disk_small); } else if (mp.type == kJFloppyDisk) { SetItemImage(1, jx_floppy_disk_small); } else if (mp.type == kJCDROM) { SetItemImage(1, jx_cdrom_disk_small); } } } } RemoveInvalidPaths(); JXStringHistoryMenu::UpdateMenu(); }
void WizChatShortcutMenu::InitMenu ( const JIndex playerIndex ) { SetTitle((WizGetApplication())->GetPlayerName(), NULL, kJFalse); RemoveAllItems(); JString fileName; if (WWGetDataFileName(kSetupFileName, &fileName)) { ifstream input(fileName); JIndex i = 0; JString nmShortcut, text; while (1) { // read one line JCharacter c; const JBoolean found = JReadUntil(input, delimiterCount, delimiters, &nmShortcut, &c); text.Clear(); if (!found) { if (!nmShortcut.IsEmpty()) { i++; AppendItem(nmShortcut); } break; } else if (found && c != '\n') { text = JReadLine(input); text.TrimWhitespace(); } // create the menu item if (nmShortcut.IsEmpty() && text.IsEmpty()) { if (i > 0) { ShowSeparatorAfter(i); } } else if (nmShortcut.IsEmpty()) { i++; AppendItem(text); } else if (text.IsEmpty()) { i++; AppendItem(nmShortcut); } else { i++; AppendItem(text); nmShortcut.PrependCharacter(' '); // avoid accidental match SetItemNMShortcut(i, nmShortcut); } } } const JSize itemCount = GetItemCount(); if (itemCount > 0) { ShowSeparatorAfter(itemCount, kJFalse); } }
void CBFunctionMenu::UpdateMenu() { CBFnMenuUpdater* updater = CBMGetFnMenuUpdater(); const JXKeyModifiers& modifiers = GetDisplay()->GetLatestKeyModifiers(); JBoolean sort = updater->WillSortFnNames(); if (modifiers.meta()) { sort = !sort; } JBoolean includeNS = updater->WillIncludeNamespace(); if (modifiers.shift()) { includeNS = !includeNS; } const JBoolean pack = updater->WillPackFnNames(); if (itsNeedsUpdate || sort != itsSortFlag || includeNS != itsIncludeNSFlag || pack != itsPackFlag) { #if defined CODE_CRUSADER assert( itsDoc != NULL ); JString fileName; JBoolean deleteFile = kJFalse; if (itsDoc->NeedsSave()) { itsDoc->SafetySave(JXDocumentManager::kTimer); if (!itsDoc->GetSafetySaveFileName(&fileName) && (JCreateTempFile(&fileName)).OK()) { // directory may not be writable deleteFile = kJTrue; // itsDoc can't be CBTextDocument, because Code Medic uses us CBTextDocument* textDoc = dynamic_cast<CBTextDocument*>(itsDoc); assert( textDoc != NULL ); std::ofstream output(fileName); ((textDoc->GetTextEditor())->GetText()).Print(output); } } else { JBoolean onDisk; fileName = itsDoc->GetFullName(&onDisk); if (!onDisk) { fileName.Clear(); } } #elif defined CODE_MEDIC const JString& fileName = itsFileName; #endif if (!fileName.IsEmpty()) { itsLang = updater->UpdateMenu(fileName, itsFileType, sort, includeNS, pack, this, itsLineIndexList); } else { itsLang = kCBOtherLang; this->RemoveAllItems(); itsLineIndexList->RemoveAll(); } if (IsEmpty()) { SetEmptyMenuItems(); } itsNeedsUpdate = kJFalse; itsSortFlag = sort; itsIncludeNSFlag = includeNS; itsPackFlag = pack; itsCaretItemIndex = 0; // nothing to remove itsTE->DeactivateCurrentUndo(); // force another TextChanged #if defined CODE_CRUSADER if (deleteFile) { JRemoveFile(fileName); } #endif } // mark caret location if (!sort && !itsLineIndexList->IsEmpty()) { if (itsCaretItemIndex > 0) { ShowSeparatorAfter(itsCaretItemIndex, kJFalse); itsCaretItemIndex = 0; } const JIndex lineIndex = itsTE->VisualLineIndexToCRLineIndex( itsTE->GetLineForChar(itsTE->GetInsertionIndex())); const JSize count = GetItemCount(); assert( count == itsLineIndexList->GetElementCount() ); for (JIndex i=1; i<=count; i++) { if (itsLineIndexList->GetElement(i) > lineIndex) { itsCaretItemIndex = i-1; if (itsCaretItemIndex > 0) { ShowSeparatorAfter(itsCaretItemIndex, kJTrue); } break; } } } }
void JXTextMenuData::InsertMenuItems ( const JIndex startIndex, const JCharacter* menuStr, const JCharacter* idNamespace ) { JStringManager* strMgr = JGetStringManager(); JSize currIndex = startIndex; JString str = menuStr; JBoolean done = kJFalse; JString itemText, shortcuts, nmShortcut, id, strID, id1; while (!done) { JIndex sepIndex; const JBoolean found = str.LocateSubstring("|", &sepIndex); if (found) { assert( sepIndex > 1 ); itemText = str.GetSubstring(1, sepIndex-1); str.RemoveSubstring(1, sepIndex); } else { itemText = str; done = kJTrue; } JBoolean isActive, hasSeparator, isCheckbox, isRadio; ParseMenuItemStr(&itemText, &isActive, &hasSeparator, &isCheckbox, &isRadio, &shortcuts, &nmShortcut, &id); if (!JStringEmpty(idNamespace) && !id.IsEmpty()) { strID = id; strID += "::"; strID += idNamespace; JString* itemText1; if (strMgr->GetElement(strID, &itemText1) && itemText1 != NULL) { itemText = *itemText1; JBoolean isActive1, hasSeparator1, isCheckbox1, isRadio1; ParseMenuItemStr(&itemText, &isActive1, &hasSeparator1, &isCheckbox1, &isRadio1, &shortcuts, &nmShortcut, &id1); } } InsertItem(currIndex, itemText, isCheckbox, isRadio, shortcuts, nmShortcut, id); if (!isActive) { DisableItem(currIndex); } if (hasSeparator) { ShowSeparatorAfter(currIndex); } currIndex++; } }