void JXFSBindingTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { JPoint editCell; if (GetEditedCell(&editCell) && cell == editCell) { return; } HilightIfSelected(p, cell, rect); const JFSBinding* b = itsBindingList->GetBinding(cell.y); JFSBinding::CommandType type; JBoolean singleFile; const JString& cmd = b->GetCommand(&type, &singleFile); if (cell.x == kPatternColumn) { p.SetFont(JGetMonospaceFontName(), kJDefaultMonoFontSize, JFontStyle()); JRect r = rect; r.left += kHMarginWidth; p.String(r, b->GetPattern(), JPainter::kHAlignLeft, JPainter::kVAlignCenter); p.SetFont(JGetDefaultFontName(), kJDefaultFontSize, JFontStyle()); } else if (cell.x == kCommandColumn) { p.SetFont(JGetMonospaceFontName(), kJDefaultMonoFontSize, JFontStyle()); JRect r = rect; r.left += kHMarginWidth; p.String(r, cmd, JPainter::kHAlignLeft, JPainter::kVAlignCenter); p.SetFont(JGetDefaultFontName(), kJDefaultFontSize, JFontStyle()); } else if (cell.x == kTypeColumn) { const JString& str = itsTypeMenu->GetItemText(kCmdTypeToMenuIndex[type]); p.String(rect, str, JPainter::kHAlignCenter, JPainter::kVAlignCenter); } else if (cell.x == kSingleFileColumn && singleFile) { JRect r; r.top = rect.ycenter(); r.left = rect.xcenter(); r.bottom = r.top+1; r.right = r.left+1; r.Expand(3, 3); p.SetFilling(kJTrue); p.Ellipse(r); p.SetFilling(kJFalse); } }
void THXVarTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { JPoint editCell; if (GetEditedCell(&editCell) && cell == editCell) { return; } JRect r = rect; r.left += kHMarginWidth; const JIndex varIndex = cell.y + THXVarList::kUserFnOffset; if (cell.x == kNameColumn) { p.String(r, itsVarList->GetVariableName(varIndex), JPainter::kHAlignLeft, JPainter::kVAlignCenter); } else if (cell.x == kFnColumn) { const JString s = (itsVarList->GetFunction(varIndex))->Print(); p.String(r, s, JPainter::kHAlignLeft, JPainter::kVAlignCenter); } }
void CBSymbolTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { HilightIfSelected(p, cell, rect); const JIndex symbolIndex = CellToSymbolIndex(cell); CBLanguage lang; CBSymbolList::Type type; const JString& symbolName = itsSymbolList->GetSymbol(symbolIndex, &lang, &type); const JString* signature; itsSymbolList->GetSignature(symbolIndex, &signature); if (CalcColWidths(symbolName, signature)) { AdjustColWidths(); } const JXImage* icon = NULL; const JFontStyle& style = (CBGetSymbolTypeList())->GetStyle(type, &icon); // draw icon if (icon != NULL) { JRect r = rect; r.right = r.left + kIconWidth; p.Image(*icon, icon->GetBounds(), r); } // draw name p.SetFontStyle(style); JRect r = rect; r.left += kIconWidth + kHMarginWidth; p.String(r, symbolName, JPainter::kHAlignLeft, JPainter::kVAlignCenter); if (signature != NULL) { r.left += (GetFontManager())->GetStringWidth( JGetDefaultFontName(), kJDefaultFontSize, JFontStyle(), symbolName); p.String(r, *signature, JPainter::kHAlignLeft, JPainter::kVAlignCenter); } }
void JXColHeaderWidget::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { JXDrawUpFrame(p, rect, kCellFrameWidth); JString str; JBoolean hasTitle = kJFalse; if (itsTitles != NULL) { const JString* title = itsTitles->NthElement(cell.x); if (title != NULL) { str = *title; hasTitle = kJTrue; } } if (!hasTitle) { str = JString(cell.x, 0); } p.SetFont(JGetDefaultFontName(), kFontSize, JFontStyle(kJTrue, kJFalse, 0, kJFalse, (p.GetColormap())->GetBlackColor())); p.String(rect, str, JPainter::kHAlignCenter, JPainter::kVAlignCenter); }
void GPMTreeHeaderWidget::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { JXDrawUpFrame(p, rect, kJXDefaultBorderWidth); JString str; if (!GetColTitle(cell.x, &str)) { str = JString(cell.x, JString::kBase10); } JSize underLines = 0; if (itsList->TreeColIsSelected(cell.x)) { underLines = 1; } const JFont font = GetFontManager()->GetFont( JGetDefaultFontName(), JGetDefaultRowColHeaderFontSize(), JFontStyle(kJTrue, kJFalse, underLines, kJFalse, (p.GetColormap())->GetBlackColor())); p.SetFont(font); p.String(rect, str, JPainter::kHAlignCenter, JPainter::kVAlignCenter); }
void DataTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { // Convert the array's current element into a JString. JString cellNumber(itsData->GetElement(cell.y)); // Draw the JString that holds the value. p.String(rect, cellNumber, JPainter::kHAlignLeft, JPainter::kVAlignTop); }
void SimpleTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { // Convert the row number into a JString. JString cellNumber(cell.y); // Draw the JString that holds the value. p.String(rect, cellNumber, JPainter::kHAlignLeft, JPainter::kVAlignTop); }
void FitParmsTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { JString* str; p.SetFont(GetFontManager()->GetDefaultFont()); JRect r = rect; if (cell.x == 1) { r.right -= kHMarginWidth; str = itsCol1->NthElement(cell.y); p.String(r, *str, JPainter::kHAlignRight, JPainter::kVAlignCenter); } else { r.left += kHMarginWidth; str = itsCol2->NthElement(cell.y); p.String(r, *str, JPainter::kHAlignLeft, JPainter::kVAlignCenter); } }
void JX2DCurveNameList::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { HilightIfSelected(p, cell, rect); const JString* curveName = itsNameList->NthElement(cell.y); JRect r = rect; r.left += kHMarginWidth; p.String(r, *curveName, JPainter::kHAlignLeft, JPainter::kVAlignCenter); }
void CMLineIndexTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { HilightIfSelected(p, cell, rect); if (JIndex(cell.x) == kBreakpointColumn) { DrawBreakpoints(p, cell, rect); } else if (JIndex(cell.x) == kExecPointColumn && cell.y == itsCurrentLineIndex) { // We can't use a static polygon because line heights can vary, // e.g. due to underlines. const JCoordinate delta = rect.height()/2; JPolygon poly; poly.AppendElement(JPoint(rect.left+kMarginWidth, rect.top)); poly.AppendElement(JPoint(rect.left+kMarginWidth+delta, rect.top + delta)); poly.AppendElement(JPoint(rect.left+kMarginWidth, rect.top + 2*delta)); p.SetPenColor(GetCurrentLineMarkerColor()); p.SetFilling(kJTrue); p.Polygon(poly); p.SetPenColor(GetColormap()->GetBlackColor()); p.SetFilling(kJFalse); p.Polygon(poly); } else if (JIndex(cell.x) == kLineNumberColumn) { p.SetFont(itsText->GetDefaultFont()); JRect r = rect; r.right -= kMarginWidth; const JString str = GetLineText(cell.y); p.String(r, str, JPainter::kHAlignRight); } }
void GLFitParameterTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { HilightIfSelected(p, cell, rect); JIndex realIndex = cell.x; if (realIndex == kStartColIndex && !itsHasStartValues) { realIndex = kFitColIndex; } else if (realIndex == kFitColIndex && !itsHasStartValues) { realIndex = kErrorColIndex; } JString str; if (realIndex == kNameColIndex) { str = *(itsNameList->NthElement(cell.y)); } else if (realIndex == kStartColIndex) { str = JString(itsStartValues->GetElement(cell.y), JString::kPrecisionAsNeeded, JString::kStandardExponent, 0, 5); } else if (realIndex == kFitColIndex) { str = JString(itsFitValues->GetElement(cell.y), JString::kPrecisionAsNeeded, JString::kStandardExponent, 0, 5); } else if (realIndex == kErrorColIndex) { str = JString(itsErrorValues->GetElement(cell.y), JString::kPrecisionAsNeeded, JString::kStandardExponent, 0, 5); } JRect r = rect; r.left += kHMarginWidth; p.String(r, str, JPainter::kHAlignLeft, JPainter::kVAlignCenter); }
void SelectionTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { // JTable keeps track of what's selected. If we want just // basic hilighting of the selected cells, we can have JTable // do it with this call: HilightIfSelected(p, cell, rect); // Convert the array's current element into a JString. JString cellNumber(itsData->GetElement(cell.y)); // Draw the JString that holds the value. p.String(rect, cellNumber, JPainter::kHAlignLeft, JPainter::kVAlignTop); }
void GMAccountList::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { HilightIfSelected(p, cell, rect); JFontStyle fontstyle; if (itsDialog->GetDefaultIndex() == (JIndex)cell.y) { fontstyle.bold = kJTrue; } p.SetFont(JGetDefaultFontName(), kJDefaultFontSize, fontstyle); JString str = itsAccountInfo->NthElement(cell.y)->GetNickname(); // check that column is wide enough const JCoordinate w = p.GetStringWidth(str) + 2*kHMarginWidth; if (w > GetColWidth(1)) { itsMinColWidth = w; } // draw string JRect r = rect; r.left += kHMarginWidth; p.String(r, str, JPainter::kHAlignLeft, JPainter::kVAlignCenter); if (cell.y == JCoordinate(itsAccountInfo->GetElementCount())) { AdjustColWidth(); } }
void JXRowHeaderWidget::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { JXDrawUpFrame(p, rect, kCellFrameWidth); JString str; JBoolean hasTitle = kJFalse; if (itsTitles != NULL) { const JString* title = itsTitles->NthElement(cell.y); if (title != NULL) { str = *title; hasTitle = kJTrue; } } if (!hasTitle) { str = JString(cell.y, JString::kBase10); } p.SetFont(JGetDefaultFontName(), kJDefaultRowColHeaderFontSize, JFontStyle(kJTrue, kJFalse, 0, kJFalse, (p.GetColormap())->GetBlackColor())); p.String(rect, str, JPainter::kHAlignCenter, JPainter::kVAlignCenter); const JCoordinate wmin = p.GetStringWidth(str) + 2*itsHMarginWidth; if (rect.width() < wmin && itsMaxBcastWidth < wmin) { Broadcast(NeedsToBeWidened(wmin - itsMaxBcastWidth)); itsMaxBcastWidth = wmin; } }
void GLFitDescriptionList::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { HilightIfSelected(p, cell, rect); const JString* curveName = itsNameList->NthElement(cell.y); const GLFitDescription& fd = GetFitManager()->GetFitDescription(cell.y); JRect irect = rect; irect.right = rect.left + kIconWidth; if (fd.GetType() == GLFitDescription::kPolynomial) { p.Image(*itsPolyIcon, itsPolyIcon->GetBounds(), irect); } else if (fd.GetType() == GLFitDescription::kNonLinear) { p.Image(*itsNonLinearIcon, itsNonLinearIcon->GetBounds(), irect); } else if (fd.GetType() == GLFitDescription::kModule) { p.Image(*itsExecutableIcon, itsExecutableIcon->GetBounds(), irect); } else if (fd.GetType() >= GLFitDescription::kBLinear) { p.Image(*itsBuiltInIcon, itsBuiltInIcon->GetBounds(), irect); } JRect r = rect; r.left += kHMarginWidth + kIconWidth; p.String(r, *curveName, JPainter::kHAlignLeft, JPainter::kVAlignCenter); }
void JXStringTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { JPoint editCell; if (!GetEditedCell(&editCell) || cell != editCell) { HilightIfSelected(p, cell, rect); JSize fontSize; const JString& fontName = GetFont(&fontSize); p.SetFont(fontName, fontSize, GetCellStyle(cell)); const JString& str = itsStringData->GetString(cell); JRect r = rect; r.left += kHMarginWidth; p.String(r, str, JPainter::kHAlignLeft, JPainter::kVAlignCenter); } }
void TestWidget::DrawStuff ( JPainter& p ) { JIndex i; JXColormap* colormap = GetColormap(); p.SetPenColor(colormap->GetGreenColor()); JRect ellipseRect(100,50,150,300); p.Ellipse(ellipseRect); p.SetPenColor(colormap->GetBlackColor()); if (itsFillFlag) { p.SetFilling(kJTrue); } JRect ap = GetAperture(); p.Line(ap.topLeft(), ap.bottomRight()); p.Line(ap.topRight(), ap.bottomLeft()); p.SetLineWidth(2); p.SetFontName("Times"); p.SetFontSize(18); p.Image(*itsHomeImage, itsHomeImage->GetBounds(), itsHomeRect); its2Rect = JRect(150, 5, 200, 30); p.SetPenColor(colormap->GetRedColor()); p.Rect(its2Rect); p.SetFontStyle(colormap->GetRedColor()); p.String(its2Rect.topLeft(), "2", its2Rect.width(), JPainter::kHAlignCenter, its2Rect.height(), JPainter::kVAlignCenter); its3Rect = JRect(10, 150, 40, 200); p.SetPenColor(colormap->GetBlueColor()); p.Rect(its3Rect); p.SetFontStyle(colormap->GetBlueColor()); p.String(its3Rect.topLeft(), "3", its3Rect.width(), JPainter::kHAlignCenter, its3Rect.height(), JPainter::kVAlignCenter); p.SetLineWidth(1); p.SetFont(GetFontManager()->GetDefaultFont()); p.ShiftOrigin(10,10); p.Point(0,0); for (i=1; i<=itsRandPointCount; i++) { p.Point(itsRNG.UniformLong(0,200), itsRNG.UniformLong(0,200)); } p.SetPenColor(colormap->GetRedColor()); p.Line(10,0, 0,10); p.SetPenColor(colormap->GetGreenColor()); p.LineTo(10,20); p.SetPenColor(colormap->GetBlueColor()); p.LineTo(0,30); p.ShiftOrigin(2,0); JPoint textPt(40,30); p.String( 0.0, textPt, "Hello"); p.String( 90.0, textPt, "Hello"); p.String(180.0, textPt, "Hello"); p.String(270.0, textPt, "Hello"); p.ShiftOrigin(-2, 0); p.SetPenColor(colormap->GetBlueColor()); JRect r(70, 290, 150, 390); p.Rect(r); /* for (JCoordinate y=70; y<150; y++) { p.SetPenColor(colormap->GetGrayColor(y-50)); p.Line(290,y, 390,y); } for (JCoordinate x=290; x<390; x++) { p.SetPenColor(colormap->GetGrayColor(x-290)); p.Line(x,70, x,150); } p.SetLineWidth(2); for (JCoordinate y=70; y<150; y+=2) { p.SetPenColor(colormap->GetGrayColor(y%4 ? 40 : 60)); p.Line(290,y, 390,y); } p.SetLineWidth(1); p.SetLineWidth(2); for (JCoordinate x=290; x<390; x+=2) { p.SetPenColor(colormap->GetGrayColor(x%4 ? 40 : 60)); p.Line(x,70, x,150); } p.SetLineWidth(1); */ p.String( 0.0, r, "Hello", JPainter::kHAlignCenter, JPainter::kVAlignCenter); p.String( 90.0, r, "Hello", JPainter::kHAlignCenter, JPainter::kVAlignCenter); p.String(180.0, r, "Hello", JPainter::kHAlignCenter, JPainter::kVAlignCenter); p.String(270.0, r, "Hello", JPainter::kHAlignCenter, JPainter::kVAlignCenter); p.String( 0.0, r, "Hello", JPainter::kHAlignRight, JPainter::kVAlignBottom); p.String( 90.0, r, "Hello", JPainter::kHAlignRight, JPainter::kVAlignBottom); p.String(180.0, r, "Hello", JPainter::kHAlignRight, JPainter::kVAlignBottom); p.String(270.0, r, "Hello", JPainter::kHAlignRight, JPainter::kVAlignBottom); p.SetPenColor(colormap->GetBlueColor()); p.Rect(200, 10, 100, 50); p.String(200, 10, "Hello", 100, JPainter::kHAlignLeft); p.String(200, 10+p.GetLineHeight(), "Hello", 100, JPainter::kHAlignCenter); p.String(200, 10+2*p.GetLineHeight(), "Hello", 100, JPainter::kHAlignRight); p.SetPenColor(colormap->GetDarkGreenColor()); p.SetFilling(kJTrue); p.Rect(290, 160, 100, 80); p.SetFilling(kJFalse); /* for (JCoordinate y=160; y<240; y++) { p.SetPenColor(colormap->GetGrayColor(y-140)); p.Line(290,y, 390,y); } for (JCoordinate x=290; x<390; x++) { p.SetPenColor(colormap->GetGrayColor(x-290)); p.Line(x,160, x,240); } p.SetLineWidth(2); for (JCoordinate y=160; y<240; y+=2) { p.SetPenColor(colormap->GetGrayColor(y%4 ? 40 : 60)); p.Line(290,y, 390,y); } p.SetLineWidth(1); p.SetLineWidth(2); for (JCoordinate x=290; x<390; x+=2) { p.SetPenColor(colormap->GetGrayColor(x%4 ? 40 : 60)); p.Line(x,160, x,240); } p.SetLineWidth(1); */ textPt.Set(340, 200); p.SetFontName("Times"); p.SetFontStyle(colormap->GetBlueColor()); p.String( 0.0, textPt, "Hello"); p.String( 90.0, textPt, "Hello"); p.SetFontStyle(colormap->GetYellowColor()); p.String(180.0, textPt, "Hello"); p.String(270.0, textPt, "Hello"); p.SetPenColor(colormap->GetYellowColor()); r.Set(0,11,80,91); p.Rect(r); r.Shrink(1,1); p.SetPenColor(colormap->GetBlueColor()); p.Ellipse(r); r.Shrink(1,1); p.SetPenColor(colormap->GetRedColor()); p.Arc(r, 270.0-45.0, -270.0); JPolygon poly; poly.AppendElement(JPoint(0,85)); poly.AppendElement(JPoint(10,85)); poly.AppendElement(JPoint(5,95)); p.Polygon(poly); p.Line(0,100, 2,98); p.LineTo(4,100); p.LineTo(2,102); p.LineTo(0,100); poly.SetElement(1, JPoint(0,5)); poly.SetElement(2, JPoint(2,0)); poly.SetElement(3, JPoint(4,5)); p.Polygon(2,105, poly); // test filling rule p.SetPenColor(colormap->GetRedColor()); p.SetFilling(kJTrue); JPolygon fillRulePoly; fillRulePoly.AppendElement(JPoint(175,45)); fillRulePoly.AppendElement(JPoint(165,65)); fillRulePoly.AppendElement(JPoint(190,50)); fillRulePoly.AppendElement(JPoint(160,50)); fillRulePoly.AppendElement(JPoint(185,65)); p.Polygon(fillRulePoly); p.SetFilling(kJFalse); // dashed lines p.DrawDashedLines(kJTrue); p.SetPenColor(colormap->GetBlackColor()); JArray<JSize> dashList; // pixel rulers dashList.AppendElement(1); dashList.AppendElement(1); p.SetDashList(dashList); p.Line(100,110, 200,110); p.Line(100,114, 200,114); p.Line(100,118, 200,118); dashList.SetElement(1, 2); // simple pattern dashList.SetElement(2, 3); p.SetDashList(dashList); p.Line(100,112, 200,112); p.SetFontStyle(JFontStyle(kJFalse, kJFalse, 1, kJFalse)); p.String(130,155, "underline without dashes"); p.SetDashList(dashList, 3); // test offset p.Line(100,116, 200,116); dashList.SetElement(1, 1); // example with odd # of values from X manuals dashList.SetElement(2, 2); dashList.AppendElement(3); p.SetDashList(dashList); p.Line(100,120, 200,120); dashList.SetElement(1, 5); // dash-dot pattern dashList.SetElement(2, 2); dashList.SetElement(3, 1); dashList.AppendElement(2); p.SetDashList(dashList); p.Line(100,122, 200,122); p.Ellipse(210,110, 20,20); p.DrawDashedLines(kJFalse); p.Ellipse(213,113, 14,14); p.Rect(207,107, 26,26); p.SetPenColor(colormap->GetYellowColor()); p.DrawDashedLines(kJTrue); p.Ellipse(213,113, 14,14); // icons p.Image(*itsXPMImage, itsXPMImage->GetBounds(), 33,110); p.Image(*itsPartialXPMImage, itsXPMImage->GetBounds(), 50,121); }
void CBCommandTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& rect ) { JPoint editCell; if (GetEditedCell(&editCell) && cell == editCell) { return; } HilightIfSelected(p, cell, rect); const CBCommandManager::CmdInfo info = itsCmdList->GetElement(cell.y); if (info.separator) { JPoint pt1 = rect.bottomLeft(), pt2 = rect.bottomRight(); pt1.y--; pt2.y--; p.Line(pt1, pt2); } if (cell.x == kOptionsColumn) { JString s; if (info.isMake) { s += ",M"; } if (info.isVCS) { s += ",V"; } if (info.saveAll) { s += ",S"; } if (info.oneAtATime) { s += ",O"; } if (info.useWindow) { s += ",W"; } if (info.raiseWindowWhenStart) { s += ",R"; } if (info.beepWhenFinished) { s += ",B"; } if (!s.IsEmpty()) { if (s.GetFirstCharacter() == ',') { s.RemoveSubstring(1,1); } p.String(rect, s, JPainter::kHAlignCenter, JPainter::kVAlignCenter); } } else { const JString* s = NULL; JFontStyle style; if (cell.x == kMenuTextColumn) { s = info.menuText; } else if (cell.x == kMenuShortcutColumn) { s = info.menuShortcut; } else if (cell.x == kScriptNameColumn) { s = info.name; } else if (cell.x == kCommandColumn) { s = info.cmd; } else if (cell.x == kPathColumn) { s = info.path; style.color = CBCommandPathInput::GetTextColor(*s, itsBasePath, kJFalse, p.GetColormap()); } assert( s != NULL ); p.SetFont(itsFontName, itsFontSize, style); JRect r = rect; r.left += kHMarginWidth; p.String(r, *s, JPainter::kHAlignLeft, JPainter::kVAlignCenter); } }
void TestWidget::DrawStuff ( JPainter& p ) { JIndex i; JXColormap* colormap = GetColormap(); p.SetPenColor(colormap->GetGreenColor()); JRect ellipseRect(100,50,150,300); p.Ellipse(ellipseRect); p.SetPenColor(colormap->GetBlackColor()); if (itsFillFlag) { p.SetFilling(kJTrue); } JRect ap = GetAperture(); p.Line(ap.topLeft(), ap.bottomRight()); p.Line(ap.topRight(), ap.bottomLeft()); p.SetLineWidth(2); p.SetFontName(JXGetTimesFontName()); p.SetFontSize(18); p.Image(*itsHomeImage, itsHomeImage->GetBounds(), itsHomeRect); its2Rect = JRect(150, 5, 200, 30); p.SetPenColor(colormap->GetRedColor()); p.Rect(its2Rect); p.SetFontStyle(colormap->GetRedColor()); p.String(its2Rect.topLeft(), "2", its2Rect.width(), JPainter::kHAlignCenter, its2Rect.height(), JPainter::kVAlignCenter); its3Rect = JRect(10, 150, 40, 200); p.SetPenColor(colormap->GetBlueColor()); p.Rect(its3Rect); p.SetFontStyle(colormap->GetBlueColor()); p.String(its3Rect.topLeft(), "3", its3Rect.width(), JPainter::kHAlignCenter, its3Rect.height(), JPainter::kVAlignCenter); p.SetLineWidth(1); p.SetFont(JGetDefaultFontName(), kJXDefaultFontSize, colormap->GetBlackColor()); p.ShiftOrigin(10,10); p.Point(0,0); for (i=1; i<=itsRandPointCount; i++) { p.Point(itsRNG.UniformLong(0,200), itsRNG.UniformLong(0,200)); } p.SetPenColor(colormap->GetRedColor()); p.Line(10,0, 0,10); p.SetPenColor(colormap->GetGreenColor()); p.LineTo(10,20); p.SetPenColor(colormap->GetBlueColor()); p.LineTo(0,30); p.ShiftOrigin(2,0); JPoint textPt(40,30); p.String( 0.0, textPt, "Hello"); p.String( 90.0, textPt, "Hello"); p.String(180.0, textPt, "Hello"); p.String(270.0, textPt, "Hello"); p.Rect(310, 70, 80, 80); p.String( 0.0, 310, 70, "Hello", 80, JPainter::kHAlignCenter, 80, JPainter::kVAlignCenter); p.String( 90.0, 310,150, "Hello", 80, JPainter::kHAlignCenter, 80, JPainter::kVAlignCenter); p.String(180.0, 390,150, "Hello", 80, JPainter::kHAlignCenter, 80, JPainter::kVAlignCenter); p.String(270.0, 390, 70, "Hello", 80, JPainter::kHAlignCenter, 80, JPainter::kVAlignCenter); p.Rect(200, 10, 100, 50); p.String(200, 10, "Hello", 100, JPainter::kHAlignLeft); p.String(200, 10+p.GetLineHeight(), "Hello", 100, JPainter::kHAlignCenter); p.String(200, 10+2*p.GetLineHeight(), "Hello", 100, JPainter::kHAlignRight); p.SetPenColor(colormap->GetYellowColor()); JRect r(0,11,80,91); p.Rect(r); r.Shrink(1,1); p.SetPenColor(colormap->GetBlueColor()); p.Ellipse(r); r.Shrink(1,1); p.SetPenColor(colormap->GetRedColor()); p.Arc(r, 270.0-45.0, -270.0); JPolygon poly; poly.AppendElement(JPoint(0,85)); poly.AppendElement(JPoint(10,85)); poly.AppendElement(JPoint(5,95)); p.Polygon(poly); p.Line(0,100, 2,98); p.LineTo(4,100); p.LineTo(2,102); p.LineTo(0,100); poly.SetElement(1, JPoint(0,5)); poly.SetElement(2, JPoint(2,0)); poly.SetElement(3, JPoint(4,5)); p.Polygon(2,105, poly); // test filling rule p.SetPenColor(colormap->GetRedColor()); p.SetFilling(kJTrue); JPolygon fillRulePoly; fillRulePoly.AppendElement(JPoint(175,45)); fillRulePoly.AppendElement(JPoint(165,65)); fillRulePoly.AppendElement(JPoint(190,50)); fillRulePoly.AppendElement(JPoint(160,50)); fillRulePoly.AppendElement(JPoint(185,65)); p.Polygon(fillRulePoly); p.SetFilling(kJFalse); // dashed lines p.DrawDashedLines(kJTrue); p.SetPenColor(colormap->GetBlackColor()); JArray<JSize> dashList; // pixel rulers dashList.AppendElement(1); dashList.AppendElement(1); p.SetDashList(dashList); p.Line(100,110, 200,110); p.Line(100,114, 200,114); p.Line(100,118, 200,118); dashList.SetElement(1, 2); // simple pattern dashList.SetElement(2, 3); p.SetDashList(dashList); p.Line(100,112, 200,112); p.SetFontStyle(JFontStyle(kJFalse, kJFalse, 1, kJFalse)); p.String(130,155, "underline without dashes"); p.SetDashList(dashList, 3); // test offset p.Line(100,116, 200,116); dashList.SetElement(1, 1); // example with odd # of values from X manuals dashList.SetElement(2, 2); dashList.AppendElement(3); p.SetDashList(dashList); p.Line(100,120, 200,120); dashList.SetElement(1, 5); // dash-dot pattern dashList.SetElement(2, 2); dashList.SetElement(3, 1); dashList.AppendElement(2); p.SetDashList(dashList); p.Line(100,122, 200,122); p.Ellipse(210,110, 20,20); p.DrawDashedLines(kJFalse); p.Ellipse(213,113, 14,14); p.Rect(207,107, 26,26); p.SetPenColor(colormap->GetYellowColor()); p.DrawDashedLines(kJTrue); p.Ellipse(213,113, 14,14); // animated colors p.SetFilling(kJTrue); JCoordinate x = 25; const JSize animColorCount = itsAnimColorList->GetElementCount(); for (i=1; i<=animColorCount; i++) { p.SetPenColor(itsAnimColorList->GetElement(i)); p.Rect(x, 150, 10, 10); x += 10; } // icons p.Image(*itsXPMImage, itsXPMImage->GetBounds(), 33,110); p.Image(*itsPartialXPMImage, itsXPMImage->GetBounds(), 50,121); // *NEVER* do this in your code! I do it here ONLY to test JXColormap. // (Besides, look at how messy it is!) unsigned long xPixel; if (colormap->CalcPreallocatedXPixel(62720, 56832, 45824, &xPixel)) { JXDisplay* display = GetDisplay(); Display* xdisplay = display->GetXDisplay(); GC gc = DefaultGC(xdisplay, display->GetScreen()); XSetForeground(xdisplay, gc, xPixel); XFillRectangle(xdisplay, (GetWindow())->GetXWindow(), gc, 110,40, 20,20); } }
void JXTextMenuTable::TableDrawCell ( JPainter& p, const JPoint& cell, const JRect& origRect ) { JRect rect = AdjustRectForSeparator(cell.y, origRect); if (cell.x == kCheckboxColumnIndex) { rect.left += kHilightBorderWidth; DrawCheckbox(p, cell.y, rect); } else if (cell.x == kImageColumnIndex) { const JXImage* image; if (itsTextMenuData->GetImage(cell.y, &image)) { p.Image(*image, image->GetBounds(), rect); } } else if (cell.x == kTextColumnIndex) { JIndex ulIndex; JFontID id; JSize size; JFontStyle style; const JString& text = itsTextMenuData->GetText(cell.y, &ulIndex, &id, &size, &style); if (!itsTextMenuData->IsEnabled(cell.y)) { style.color = (GetColormap())->GetInactiveLabelColor(); } p.SetFont(id, size, style); rect.left += kHMarginWidth; JXWindowPainter* xp = dynamic_cast<JXWindowPainter*>(&p); assert( xp != NULL ); xp->String(rect.left, rect.top, text, ulIndex, rect.width(), JPainter::kHAlignLeft, rect.height(), JPainter::kVAlignCenter); } else if (cell.x == kSubmenuColumnIndex && itsTextMenuData->HasSubmenu(cell.y)) { rect.right -= kHilightBorderWidth; rect.left = rect.right - JXMenuTable::kSubmenuColWidth; DrawSubmenuIndicator(p, cell.y, rect, JConvertToBoolean(((JIndex) cell.y) == itsHilightRow)); } else if (cell.x == kSubmenuColumnIndex) { const JString* nmShortcut; JFontID id; JSize size; JFontStyle style; if (itsTextMenuData->GetNMShortcut(cell.y, &nmShortcut, &id, &size, &style)) { if (!itsTextMenuData->IsEnabled(cell.y)) { style.color = (GetColormap())->GetInactiveLabelColor(); } p.SetFont(id, size, style); rect.left += kHNMSMarginWidth; rect.right -= kHilightBorderWidth; p.String(rect, *nmShortcut, JPainter::kHAlignLeft, JPainter::kVAlignCenter); } } }