CMEditCommandsDialog::CMEditCommandsDialog() : JXDialogDirector(JXGetApplication(), kJTrue), JPrefObject(CMGetPrefsManager(), kEditCommandsDialogID) { itsCommands = new JPtrArray<JString>(JPtrArrayT::kForgetAll); assert(itsCommands != NULL); (CMGetPrefsManager())->GetCmdList(itsCommands); BuildWindow(); JPrefObject::ReadPrefs(); }
void JVMGetSourceFileList::ScanDirectory ( const JCharacter* path ) { JDirInfo* info; if (!JDirInfo::Create(path, &info)) { return; } JXFileListTable* table = (GetFileList())->GetTable(); const JSize count = info->GetEntryCount(); for (JIndex i=1; i<=count; i++) { const JDirEntry& e = info->GetEntry(i); if (e.GetType() == JDirEntry::kFile) { const CBTextFileType fileType = (CMGetPrefsManager())->GetFileType(e.GetName()); if (fileType == kCBJavaSourceFT) { table->AddFile(e.GetFullName()); } } else if (e.GetType() == JDirEntry::kDir) { ScanDirectory(e.GetFullName()); } } delete info; }
void CMSourceDirector::UpdateFileType() { const CBTextFileType fileType = itsType == kMainAsmType || itsType == kAsmType ? kCBAssemblyFT : itsCurrentFile.IsEmpty() ? kCBUnknownFT : CMGetPrefsManager()->GetFileType(itsCurrentFile); itsText->SetFileType(fileType); if (!itsCurrentFile.IsEmpty() && (CMGetFnMenuUpdater())->CanCreateMenu(fileType)) { itsMenuBar->InsertMenuAfter(itsDebugMenu, itsFnMenu); itsFnMenu->TextChanged(fileType, itsCurrentFile); } else { itsMenuBar->RemoveMenu(itsFnMenu); } if (!itsCurrentFile.IsEmpty()) { JBoolean setTabWidth, setTabMode, tabInsertsSpaces, setAutoIndent, autoIndent; JSize tabWidth; CBMParseEditorOptions(itsCurrentFile, itsText->GetText(), &setTabWidth, &tabWidth, &setTabMode, &tabInsertsSpaces, &setAutoIndent, &autoIndent); if (setTabWidth) { itsText->SetCRMTabCharCount(tabWidth); itsText->SetDefaultTabWidth( tabWidth * itsText->GetDefaultFont().GetCharWidth(' ')); } } }
void CMSourceDirector::UpdatePrefsMenu() { CMPrefsManager::DebuggerType type = CMGetPrefsManager()->GetDebuggerType(); itsPrefsMenu->CheckItem(kDebuggerTypeToMenuIndex[ type ]); itsPrefsMenu->DisableItem(kUseJavaCmd); }
CMSourceDirector::~CMSourceDirector() { if (itsType == kMainSourceType) { CMGetPrefsManager()->SaveWindowSize(kMainCodeWindSizeID, GetWindow()); } else if (itsType == kMainAsmType) { CMGetPrefsManager()->SaveWindowSize(kMainAsmWindSizeID, GetWindow()); } else { itsCommandDir->SourceWindowClosed(this); } jdelete itsSrcMainCmd; }
void CMTextDisplayBase::AdjustFont ( JXTEBase* te ) { const JFontManager* fontMgr = te->TEGetFontManager(); JString name; JSize size; (CMGetPrefsManager())->GetDefaultFont(&name, &size); te->SetDefaultFont(name, size, (CMGetPrefsManager())->GetColor(CMPrefsManager::kTextColorIndex)); // colors te->SetFocusColor((CMGetPrefsManager())->GetColor(CMPrefsManager::kBackColorIndex)); te->SetCaretColor((CMGetPrefsManager())->GetColor(CMPrefsManager::kCaretColorIndex)); te->SetSelectionColor((CMGetPrefsManager())->GetColor(CMPrefsManager::kSelColorIndex)); te->SetSelectionOutlineColor((CMGetPrefsManager())->GetColor(CMPrefsManager::kSelLineColorIndex)); // tab width const JSize tabCharCount = (CMGetPrefsManager())->GetTabCharCount(); const JCoordinate charWidth = fontMgr->GetCharWidth(name, size, JFontStyle(), ' '); te->SetDefaultTabWidth(tabCharCount * charWidth); te->SetCRMTabCharCount(tabCharCount); }
void CMSourceDirector::HandlePrefsMenu ( const JIndex index ) { if (index == kUseGDBCmd) { CMGetPrefsManager()->SetDebuggerType(CMPrefsManager::kGDBType); } else if (index == kUseLLDBCmd) { CMGetPrefsManager()->SetDebuggerType(CMPrefsManager::kLLDBType); } else if (index == kUseJavaCmd) { CMGetPrefsManager()->SetDebuggerType(CMPrefsManager::kJavaType); } else if (index == kUseXdebugCmd) { CMGetPrefsManager()->SetDebuggerType(CMPrefsManager::kXdebugType); } else if (index == kEditPrefsCmd) { CMGetPrefsManager()->EditPrefs(); } else if (index == kEditToolBarCmd) { itsToolBar->Edit(); } else if (index == kEditCmdsCmd) { CMEditCommandsDialog* dlog = jnew CMEditCommandsDialog; assert(dlog != NULL); dlog->BeginDialog(); } else if (index == kEditMacWinPrefsCmd) { JXMacWinPrefsDialog::EditPrefs(); } else if (index == kWindowSizeCmd) { if (itsType == kSourceType) { CMGetPrefsManager()->SaveWindowSize(kCodeWindSizeID, GetWindow()); } else if (itsType == kAsmType) { CMGetPrefsManager()->SaveWindowSize(kAsmWindSizeID, GetWindow()); } } }
CMLineIndexTable::CMLineIndexTable ( JOrderedSetT::CompareResult (*bpCcompareFn)(CMBreakpoint *const &, CMBreakpoint *const &), CMSourceDirector* dir, CMSourceText* text, JXScrollbarSet* scrollbarSet, JXContainer* enclosure, const HSizingOption hSizing, const VSizingOption vSizing, const JCoordinate x, const JCoordinate y, const JCoordinate w, const JCoordinate h ) : JXTable(1, 1, NULL, enclosure, hSizing, vSizing, x, y, w, h), itsDirector(dir), itsText(text), itsVScrollbar(scrollbarSet->GetVScrollbar()), itsCurrentLineIndex(0), itsLineMenu(NULL), itsDeselectTask(NULL) { itsLink = CMGetLink(); ListenTo(itsLink); itsBPList = jnew JPtrArray<CMBreakpoint>(JPtrArrayT::kForgetAll); assert(itsBPList != NULL); itsBPList->SetCompareFunction(bpCcompareFn); itsBPList->SetSortOrder(JOrderedSetT::kSortAscending); WantInput(kJFalse); SetBackColor(CMGetPrefsManager()->GetColor(CMPrefsManager::kBackColorIndex)); SetFocusColor(GetBackColor()); SetRowBorderInfo(0, GetBackColor()); SetColBorderInfo(0, GetBackColor()); SetDrawOrder(kDrawByCol); AppendCols(3); CMAdjustLineTableToTextTask* task = jnew CMAdjustLineTableToTextTask(this); assert( task != NULL ); task->Go(); ListenTo(itsText); ListenTo(itsVScrollbar); ListenTo(itsLink->GetBreakpointManager()); }
void CMSourceDirector::CMSourceViewDirectorX ( CMCommandDirector* commandDir ) { itsLink = CMGetLink(); ListenTo(itsLink); itsCommandDir = commandDir; ListenTo(itsCommandDir); BuildWindow(); ListenTo(CMGetPrefsManager()); }
JBoolean CMEditCommandsDialog::OKToDeactivate() { if (Cancelled()) { return kJTrue; } if (!itsWidget->EndEditing()) { return kJFalse; } (CMGetPrefsManager())->SetCmdList(*itsCommands); return kJTrue; }
void CMArray1DDir::HandleActionMenu ( const JIndex index ) { if (index == kDisplayAsCStringCmd) { itsWidget->DisplayAsCString(); } else if (index == kDisplay1DArrayCmd) { itsWidget->Display1DArray(); } else if (index == kPlot1DArrayCmd) { itsWidget->Plot1DArray(); } else if (index == kDisplay2DArrayCmd) { itsWidget->Display2DArray(); } else if (index == kWatchVarCmd) { itsWidget->WatchExpression(); } else if (index == kWatchLocCmd) { itsWidget->WatchLocation(); } else if (index == kExamineMemCmd) { itsWidget->ExamineMemory(CMMemoryDir::kHexByte); } else if (index == kDisassembleMemCmd) { itsWidget->ExamineMemory(CMMemoryDir::kAsm); } else if (index == kSavePrefsCmd) { CMGetPrefsManager()->SaveWindowSize(kArray1DWindSizeID, GetWindow()); } }
void CMRegistersDir::BuildWindow() { // begin JXLayout JXWindow* window = new JXWindow(this, 450,500, ""); assert( window != NULL ); JXMenuBar* menuBar = new JXMenuBar(window, JXWidget::kHElastic, JXWidget::kFixedTop, 0,0, 450,30); assert( menuBar != NULL ); JXScrollbarSet* scrollbarSet = new JXScrollbarSet(window, JXWidget::kHElastic, JXWidget::kVElastic, 0,30, 450,470); assert( scrollbarSet != NULL ); // end JXLayout window->SetTitle(JGetString("WindowTitleSuffix::CMRegistersDir")); window->SetCloseAction(JXWindow::kDeactivateDirector); window->SetMinSize(150, 150); window->ShouldFocusWhenShow(kJTrue); window->SetWMClass(CMGetWMClassInstance(), CMGetRegistersWindowClass()); (CMGetPrefsManager())->GetWindowSize(kRegistersWindowSizeID, window); JXDisplay* display = GetDisplay(); JXImage* icon = new JXImage(display, medic_registers_window); assert( icon != NULL ); window->SetIcon(icon); itsWidget = new JXStaticText("", kJFalse, kJTrue, scrollbarSet, scrollbarSet->GetScrollEnclosure(), JXWidget::kHElastic, JXWidget::kVElastic, 0,0, 100,100); assert(itsWidget != NULL); itsWidget->FitToEnclosure(); JString name; JSize size; (CMGetPrefsManager())->GetDefaultFont(&name, &size); itsWidget->SetFont(name, size); // menus itsFileMenu = menuBar->PrependTextMenu(kFileMenuTitleStr); itsFileMenu->SetMenuItems(kFileMenuStr, "CMThreadsDir"); itsFileMenu->SetUpdateAction(JXMenu::kDisableNone); ListenTo(itsFileMenu); itsFileMenu->SetItemImage(kOpenCmd, jx_file_open); itsWidget->AppendEditMenu(menuBar); JXWDMenu* wdMenu = new JXWDMenu(kWindowsMenuTitleStr, menuBar, JXWidget::kFixedLeft, JXWidget::kVElastic, 0,0, 10,10); assert( wdMenu != NULL ); menuBar->AppendMenu(wdMenu); itsHelpMenu = menuBar->AppendTextMenu(kHelpMenuTitleStr); itsHelpMenu->SetMenuItems(kHelpMenuStr, "CMRegistersDir"); itsHelpMenu->SetUpdateAction(JXMenu::kDisableNone); ListenTo(itsHelpMenu); itsHelpMenu->SetItemImage(kTOCCmd, jx_help_toc); itsHelpMenu->SetItemImage(kThisWindowCmd, jx_help_specific); }
void CMSourceDirector::Receive ( JBroadcaster* sender, const Message& message ) { if (IsMainSourceWindow() && sender == itsLink && message.Is(CMLink::kDebuggerStarted)) { ClearDisplay(); } else if (sender == itsLink && message.Is(CMLink::kPrepareToLoadSymbols)) { if (!itsCurrentFile.IsEmpty()) // reload file, in case it changed { const JString fileName = itsCurrentFile; const JIndex lineIndex = itsText->HasSelection() ? itsText->GetLineForChar(itsText->GetInsertionIndex()) : itsTable->GetCurrentLine(); itsCurrentFile.Clear(); // force reload DisplayFile(fileName, lineIndex); } } else if (IsMainSourceWindow() && sender == itsLink && message.Is(CMLink::kSymbolsLoaded)) { const CMLink::SymbolsLoaded* info = dynamic_cast<const CMLink::SymbolsLoaded*>(&message); assert( info != NULL ); UpdateWindowTitle(info->GetProgramName()); } else if (IsMainSourceWindow() && sender == itsLink && message.Is(CMLink::kProgramStopped)) { const CMLink::ProgramStopped* info = dynamic_cast<const CMLink::ProgramStopped*>(&message); assert( info != NULL); const CMLocation* loc; const JBoolean hasFile = info->GetLocation(&loc); if (itsType == kMainSourceType && hasFile) { DisplayFile(loc->GetFileName(), loc->GetLineNumber()); } else if (itsType == kMainAsmType && !loc->GetFunctionName().IsEmpty() && !loc->GetMemoryAddress().IsEmpty()) { DisplayDisassembly(*loc); } else if (itsType == kMainAsmType) { // wait for kProgramStopped2 } else { #ifdef _J_OLD_OSX itsTable->SetCurrentLine(0); // we get blank location the first time #else ClearDisplay(); (CMGetCommandDirector())->GetStackDir()->Activate(); #endif } } else if (itsType == kMainAsmType && sender == itsLink && message.Is(CMLink::kProgramStopped2)) { const CMLink::ProgramStopped2* info = dynamic_cast<const CMLink::ProgramStopped2*>(&message); assert( info != NULL); const CMLocation* loc; info->GetLocation(&loc); if (!loc->GetFunctionName().IsEmpty() && !loc->GetMemoryAddress().IsEmpty()) { DisplayDisassembly(*loc); } else { ClearDisplay(); } } else if (sender == itsLink && (message.Is(CMLink::kProgramFinished) || message.Is(CMLink::kCoreCleared) || message.Is(CMLink::kDetachedFromProcess))) { if (itsSrcMainCmd != NULL) { itsSrcMainCmd->CMCommand::Send(); } else if (itsType == kMainAsmType) { ClearDisplay(); } } else if (sender == itsFileMenu && message.Is(JXMenu::kNeedsUpdate)) { UpdateFileMenu(); } else if (sender == itsFileMenu && message.Is(JXMenu::kItemSelected)) { const JXMenu::ItemSelected* selection = dynamic_cast<const JXMenu::ItemSelected*>(&message); assert( selection != NULL ); HandleFileMenu(selection->GetIndex()); } else if (sender == itsDebugMenu && message.Is(JXMenu::kNeedsUpdate)) { itsCommandDir->UpdateDebugMenu(itsDebugMenu, itsText, NULL); } else if (sender == itsDebugMenu && message.Is(JXMenu::kItemSelected)) { const JXMenu::ItemSelected* selection = dynamic_cast<const JXMenu::ItemSelected*>(&message); assert( selection != NULL ); itsCommandDir->HandleDebugMenu(itsDebugMenu, selection->GetIndex(), itsText, NULL); } else if (sender == itsPrefsMenu && message.Is(JXMenu::kNeedsUpdate)) { UpdatePrefsMenu(); } else if (sender == itsPrefsMenu && message.Is(JXMenu::kItemSelected)) { const JXMenu::ItemSelected* selection = dynamic_cast<const JXMenu::ItemSelected*>(&message); assert( selection != NULL ); HandlePrefsMenu(selection->GetIndex()); } else if (sender == itsHelpMenu && message.Is(JXMenu::kItemSelected)) { const JXMenu::ItemSelected* selection = dynamic_cast<const JXMenu::ItemSelected*>(&message); assert( selection != NULL ); HandleHelpMenu(selection->GetIndex()); } else if (sender == CMGetPrefsManager() && message.Is(CMPrefsManager::kFileTypesChanged)) { UpdateFileType(); } else if (sender == CMGetPrefsManager() && message.Is(CMPrefsManager::kCustomCommandsChanged)) { itsCommandDir->AdjustDebugMenu(itsDebugMenu); } else { JXWindowDirector::Receive(sender,message); } }
void CMSourceDirector::BuildWindow() { const JIndex prefID = itsType == kMainSourceType ? kMainSrcToolBarID : itsType == kMainAsmType ? kMainAsmToolBarID : itsType == kAsmType ? kOtherAsmToolBarID : kOtherSrcToolBarID; // begin JXLayout JXWindow* window = jnew JXWindow(this, 600,550, ""); assert( window != NULL ); itsMenuBar = jnew JXMenuBar(window, JXWidget::kHElastic, JXWidget::kFixedTop, 0,0, 600,30); assert( itsMenuBar != NULL ); itsToolBar = jnew JXToolBar(CMGetPrefsManager(), prefID, itsMenuBar, window, JXWidget::kHElastic, JXWidget::kVElastic, 0,30, 600,500); assert( itsToolBar != NULL ); itsFileDisplay = jnew JXFileNameDisplay("", window, JXWidget::kHElastic, JXWidget::kFixedBottom, 20,530, 580,20); assert( itsFileDisplay != NULL ); CMFileDragSource* dragSource = jnew CMFileDragSource(this, window, JXWidget::kFixedLeft, JXWidget::kFixedBottom, 0,530, 20,20); assert( dragSource != NULL ); // end JXLayout window->SetTitle(JGetString( itsType == kMainAsmType ? "InitAsmWindowTitle::CMSourceDirector" : "InitSourceWindowTitle::CMSourceDirector")); window->SetMinSize(300, 200); if (itsType == kMainSourceType) { window->SetCloseAction(JXWindow::kDeactivateDirector); window->SetWMClass(CMGetWMClassInstance(), CMGetMainSourceWindowClass()); CMGetPrefsManager()->GetWindowSize(kMainCodeWindSizeID, window); JXDisplay* display = GetDisplay(); JXImage* icon = jnew JXImage(display, medic_current_source_window); assert( icon != NULL ); window->SetIcon(icon); } else if (itsType == kMainAsmType) { window->SetCloseAction(JXWindow::kDeactivateDirector); window->SetWMClass(CMGetWMClassInstance(), CMGetMainAsmWindowClass()); CMGetPrefsManager()->GetWindowSize(kMainAsmWindSizeID, window); JXDisplay* display = GetDisplay(); JXImage* icon = jnew JXImage(display, medic_current_asm_window); assert( icon != NULL ); window->SetIcon(icon); } else if (itsType == kAsmType) { window->SetWMClass(CMGetWMClassInstance(), CMGetAsmViewWindowClass()); CMGetPrefsManager()->GetWindowSize(kAsmWindSizeID, window, kJTrue); } else { window->SetWMClass(CMGetWMClassInstance(), CMGetSourceViewWindowClass()); CMGetPrefsManager()->GetWindowSize(kCodeWindSizeID, window, kJTrue); } JCoordinate w = window->GetFrameWidth(); itsFileMenu = itsMenuBar->AppendTextMenu(kFileMenuTitleStr); itsFileMenu->SetMenuItems(kFileMenuStr, "CMSourceDirector"); itsFileMenu->SetUpdateAction(JXMenu::kDisableNone); ListenTo(itsFileMenu); itsFileMenu->SetItemImage(kOpenCmd, jx_file_open); itsFileMenu->SetItemImage(kPrintCmd, jx_file_print); // appends Edit & Search menus const JCoordinate kInitTableWidth = 50; JXScrollbarSet* scrollbarSet = jnew JXScrollbarSet(itsToolBar->GetWidgetEnclosure(), JXWidget::kHElastic, JXWidget::kVElastic, 0,0, 100,100); assert( scrollbarSet != NULL ); scrollbarSet->FitToEnclosure(); JXContainer* encl = scrollbarSet->GetScrollEnclosure(); itsText = jnew CMSourceText(this, itsCommandDir, itsMenuBar, scrollbarSet, encl, JXWidget::kHElastic, JXWidget::kVElastic, kInitTableWidth, 0, encl->GetApertureWidth()-kInitTableWidth, 100); assert( itsText != NULL ); itsText->FitToEnclosure(kJFalse, kJTrue); ListenTo(itsText); if (itsType == kMainAsmType || itsType == kAsmType) { itsTable = jnew CMLineAddressTable(this, itsText, scrollbarSet, encl, JXWidget::kFixedLeft, JXWidget::kVElastic, 0, 0, kInitTableWidth, 100); } else { itsTable = jnew CMLineNumberTable(this, itsText, scrollbarSet, encl, JXWidget::kFixedLeft, JXWidget::kVElastic, 0, 0, kInitTableWidth, 100); } assert( itsTable != NULL ); itsTable->FitToEnclosure(kJFalse, kJTrue); // requires itsText itsDebugMenu = itsCommandDir->CreateDebugMenu(itsMenuBar); ListenTo(itsDebugMenu); itsFnMenu = jnew CBFunctionMenu(NULL, kCBUnknownFT, itsText, itsMenuBar, JXWidget::kFixedLeft, JXWidget::kFixedTop, 0,0, 10,10); assert( itsFnMenu != NULL ); itsFnMenu->Hide(); itsPrefsMenu = itsMenuBar->AppendTextMenu(kPrefsMenuTitleStr); itsPrefsMenu->SetMenuItems(kPrefsMenuStr, "CMSourceDirector"); itsPrefsMenu->SetUpdateAction(JXMenu::kDisableNone); if (IsMainSourceWindow()) { itsPrefsMenu->RemoveItem(kWindowSizeCmd); } ListenTo(itsPrefsMenu); itsHelpMenu = itsMenuBar->AppendTextMenu(kHelpMenuTitleStr); itsHelpMenu->SetMenuItems(kHelpMenuStr, "CMSourceDirector"); itsHelpMenu->SetUpdateAction(JXMenu::kDisableNone); ListenTo(itsHelpMenu); itsHelpMenu->SetItemImage(kTOCCmd, jx_help_toc); itsHelpMenu->SetItemImage(kThisWindowCmd, jx_help_specific); if (!IsMainSourceWindow()) { (GetDisplay()->GetWDManager())->DirectorCreated(this); } }
CMRegistersDir::~CMRegistersDir() { (CMGetPrefsManager())->SaveWindowSize(kRegistersWindowSizeID, GetWindow()); }
void CMArray1DDir::BuildWindow() { // begin JXLayout JXWindow* window = jnew JXWindow(this, 300,500, ""); assert( window != NULL ); itsExprInput = jnew CMArrayExprInput(window, JXWidget::kHElastic, JXWidget::kFixedTop, 110,40, 170,20); assert( itsExprInput != NULL ); JXStaticText* startLabel = jnew JXStaticText(JGetString("startLabel::CMArray1DDir::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 20,70, 90,20); assert( startLabel != NULL ); startLabel->SetToLabel(); JXStaticText* endLabel = jnew JXStaticText(JGetString("endLabel::CMArray1DDir::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 20,100, 90,20); assert( endLabel != NULL ); endLabel->SetToLabel(); itsStopButton = jnew JXTextButton(JGetString("itsStopButton::CMArray1DDir::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 200,85, 60,20); assert( itsStopButton != NULL ); itsStopButton->SetShortcuts(JGetString("itsStopButton::CMArray1DDir::shortcuts::JXLayout")); JXMenuBar* menuBar = jnew JXMenuBar(window, JXWidget::kHElastic, JXWidget::kFixedTop, 0,0, 300,30); assert( menuBar != NULL ); JXScrollbarSet* scrollbarSet = jnew JXScrollbarSet(window, JXWidget::kHElastic, JXWidget::kVElastic, 0,130, 300,370); assert( scrollbarSet != NULL ); itsStartIndex = jnew CMArrayIndexInput(window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 110,70, 60,20); assert( itsStartIndex != NULL ); itsEndIndex = jnew CMArrayIndexInput(window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 110,100, 60,20); assert( itsEndIndex != NULL ); JXStaticText* exprLabel = jnew JXStaticText(JGetString("exprLabel::CMArray1DDir::JXLayout"), window, JXWidget::kFixedLeft, JXWidget::kFixedTop, 20,40, 90,20); assert( exprLabel != NULL ); exprLabel->SetToLabel(); // end JXLayout window->SetMinSize(300, 200); window->ShouldFocusWhenShow(kJTrue); window->SetWMClass(CMGetWMClassInstance(), CMGetArray1DWindowClass()); UpdateWindowTitle(); JXDisplay* display = GetDisplay(); JXImage* icon = jnew JXImage(display, medic_1d_array_window); assert( icon != NULL ); window->SetIcon(icon); CMGetPrefsManager()->GetWindowSize(kArray1DWindSizeID, window, kJTrue); CMVarNode* root = itsLink->CreateVarNode(); assert( root != NULL ); itsTree = jnew JTree(root); assert( itsTree != NULL ); JNamedTreeList* treeList = jnew JNamedTreeList(itsTree); assert( treeList != NULL ); itsWidget = jnew CMVarTreeWidget(itsCommandDir, kJFalse, menuBar, itsTree, treeList, scrollbarSet, scrollbarSet->GetScrollEnclosure(), JXWidget::kHElastic, JXWidget::kVElastic, 0,0, 100,100); assert(itsWidget != NULL); itsWidget->FitToEnclosure(); itsExprInput->SetText(itsExpr); itsExprInput->SetIsRequired(); ListenTo(itsExprInput); itsStartIndex->SetValue(itsRequestRange.first); ListenTo(itsStartIndex); itsEndIndex->SetValue(itsRequestRange.last); ListenTo(itsEndIndex); itsStopButton->Hide(); ListenTo(itsStopButton); // menus itsFileMenu = menuBar->PrependTextMenu(kFileMenuTitleStr); itsFileMenu->SetMenuItems(kFileMenuStr, "CMThreadsDir"); itsFileMenu->SetUpdateAction(JXMenu::kDisableNone); ListenTo(itsFileMenu); itsFileMenu->SetItemImage(kOpenCmd, jx_file_open); JXTEBase* te = itsWidget->GetEditMenuHandler(); itsExprInput->ShareEditMenu(te); itsStartIndex->ShareEditMenu(te); itsEndIndex->ShareEditMenu(te); itsActionMenu = menuBar->AppendTextMenu(kActionMenuTitleStr); menuBar->InsertMenu(3, itsActionMenu); itsActionMenu->SetMenuItems(kActionMenuStr, "CMArray1DDir"); ListenTo(itsActionMenu); itsActionMenu->SetItemImage(kDisplay1DArrayCmd, medic_show_1d_array); itsActionMenu->SetItemImage(kPlot1DArrayCmd, medic_show_2d_plot); itsActionMenu->SetItemImage(kDisplay2DArrayCmd, medic_show_2d_array); itsActionMenu->SetItemImage(kExamineMemCmd, medic_show_memory); JXWDMenu* wdMenu = jnew JXWDMenu(kWindowsMenuTitleStr, menuBar, JXWidget::kFixedLeft, JXWidget::kVElastic, 0,0, 10,10); assert( wdMenu != NULL ); menuBar->AppendMenu(wdMenu); itsHelpMenu = menuBar->AppendTextMenu(kHelpMenuTitleStr); itsHelpMenu->SetMenuItems(kHelpMenuStr, "CMArray1DDir"); itsHelpMenu->SetUpdateAction(JXMenu::kDisableNone); ListenTo(itsHelpMenu); itsHelpMenu->SetItemImage(kTOCCmd, jx_help_toc); itsHelpMenu->SetItemImage(kThisWindowCmd, jx_help_specific); (GetDisplay()->GetWDManager())->DirectorCreated(this); }
void CMLocalVarsDir::BuildWindow() { // begin JXLayout JXWindow* window = jnew JXWindow(this, 450,500, ""); assert( window != NULL ); JXMenuBar* menuBar = jnew JXMenuBar(window, JXWidget::kHElastic, JXWidget::kFixedTop, 0,0, 450,30); assert( menuBar != NULL ); JXScrollbarSet* scrollbarSet = jnew JXScrollbarSet(window, JXWidget::kHElastic, JXWidget::kVElastic, 0,30, 450,470); assert( scrollbarSet != NULL ); // end JXLayout window->SetTitle(kWindowTitleSuffix); window->SetCloseAction(JXWindow::kDeactivateDirector); window->SetMinSize(150, 150); window->ShouldFocusWhenShow(kJTrue); window->SetWMClass(CMGetWMClassInstance(), CMGetVariableWindowClass()); CMGetPrefsManager()->GetWindowSize(kLocalVarWindSizeID, window); JXDisplay* display = GetDisplay(); JXImage* icon = jnew JXImage(display, medic_local_variables_window); assert( icon != NULL ); window->SetIcon(icon); CMVarNode* root = itsLink->CreateVarNode(kJFalse); assert( root != NULL ); itsTree = jnew JTree(root); assert( itsTree != NULL ); JNamedTreeList* treeList = jnew JNamedTreeList(itsTree); assert( treeList != NULL ); itsWidget = jnew CMVarTreeWidget(itsCommandDir, kJFalse, menuBar, itsTree, treeList, scrollbarSet, scrollbarSet->GetScrollEnclosure(), JXWidget::kHElastic, JXWidget::kVElastic, 0,0, 100,100); assert(itsWidget != NULL); itsWidget->FitToEnclosure(); itsGetLocalsCmd = itsLink->CreateGetLocalVars(root); // menus itsFileMenu = menuBar->PrependTextMenu(kFileMenuTitleStr); itsFileMenu->SetMenuItems(kFileMenuStr, "CMThreadsDir"); itsFileMenu->SetUpdateAction(JXMenu::kDisableNone); ListenTo(itsFileMenu); itsFileMenu->SetItemImage(kOpenCmd, jx_file_open); itsActionMenu = menuBar->AppendTextMenu(kActionMenuTitleStr); menuBar->InsertMenu(3, itsActionMenu); itsActionMenu->SetMenuItems(kActionMenuStr, "CMLocalVarsDir"); ListenTo(itsActionMenu); itsActionMenu->SetItemImage(kDisplay1DArrayCmd, medic_show_1d_array); itsActionMenu->SetItemImage(kPlot1DArrayCmd, medic_show_2d_plot); itsActionMenu->SetItemImage(kDisplay2DArrayCmd, medic_show_2d_array); itsActionMenu->SetItemImage(kExamineMemCmd, medic_show_memory); JXWDMenu* wdMenu = jnew JXWDMenu(kWindowsMenuTitleStr, menuBar, JXWidget::kFixedLeft, JXWidget::kVElastic, 0,0, 10,10); assert( wdMenu != NULL ); menuBar->AppendMenu(wdMenu); itsHelpMenu = menuBar->AppendTextMenu(kHelpMenuTitleStr); itsHelpMenu->SetMenuItems(kHelpMenuStr, "CMLocalVarsDir"); itsHelpMenu->SetUpdateAction(JXMenu::kDisableNone); ListenTo(itsHelpMenu); itsHelpMenu->SetItemImage(kTOCCmd, jx_help_toc); itsHelpMenu->SetItemImage(kThisWindowCmd, jx_help_specific); }
CMLocalVarsDir::~CMLocalVarsDir() { CMGetPrefsManager()->SaveWindowSize(kLocalVarWindSizeID, GetWindow()); jdelete itsGetLocalsCmd; }