void ListBoxImpl::Create(Window &parent, int /*ctrlID*/, Point location, int /*lineHeight*/, bool unicodeMode_, int) { unicodeMode = unicodeMode_; QWidget *qparent = static_cast<QWidget *>(parent.GetID()); ListWidget *list = new ListWidget(qparent); #if defined(Q_OS_WIN) // On Windows, Qt::ToolTip causes a crash when the list is clicked on // so Qt::Tool is used. list->setParent(0, Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); #else // On OS X, Qt::Tool takes focus so main window loses focus so // keyboard stops working. Qt::ToolTip works but its only really // documented for tooltips. // On Linux / X this setting allows clicking on list items. list->setParent(0, Qt::ToolTip | Qt::FramelessWindowHint); #endif list->setAttribute(Qt::WA_ShowWithoutActivating); list->setFocusPolicy(Qt::NoFocus); list->setUniformItemSizes(true); list->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); list->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); list->move(location.x, location.y); wid = list; }
void ListBoxQt::Create(Window &parent, int, Point, int, bool unicodeMode) { utf8 = unicodeMode; // The parent we want is the QsciScintillaBase, not the text area. id = slb = new SciListBox(reinterpret_cast<QWidget *>(parent.GetID())->parentWidget(), this); }
PRectangle CallTip::CallTipStart(int pos, Point pt, int textHeight, const char *defn, const char *faceName, int size, int codePage_, int characterSet, int technology, Window &wParent) { clickPlace = 0; val = defn; codePage = codePage_; Surface *surfaceMeasure = Surface::Allocate(technology); if (!surfaceMeasure) return PRectangle(); surfaceMeasure->Init(wParent.GetID()); surfaceMeasure->SetUnicodeMode(SC_CP_UTF8 == codePage); surfaceMeasure->SetDBCSMode(codePage); startHighlight = 0; endHighlight = 0; inCallTipMode = true; posStartCallTip = pos; XYPOSITION deviceHeight = static_cast<XYPOSITION>(surfaceMeasure->DeviceHeightFont(size)); FontParameters fp(faceName, deviceHeight / SC_FONT_SIZE_MULTIPLIER, SC_WEIGHT_NORMAL, false, 0, technology, characterSet); font.Create(fp); // Look for multiple lines in the text // Only support \n here - simply means container must avoid \r! int numLines = 1; const char *newline; const char *look = val.c_str(); rectUp = PRectangle(0,0,0,0); rectDown = PRectangle(0,0,0,0); offsetMain = insetX; // changed to right edge of any arrows int width = PaintContents(surfaceMeasure, false) + insetX; while ((newline = strchr(look, '\n')) != NULL) { look = newline + 1; numLines++; } lineHeight = RoundXYPosition(surfaceMeasure->Height(font)); // The returned // rectangle is aligned to the right edge of the last arrow encountered in // the tip text, else to the tip text left edge. int height = lineHeight * numLines - static_cast<int>(surfaceMeasure->InternalLeading(font)) + borderHeight * 2; delete surfaceMeasure; if (above) { return PRectangle(pt.x - offsetMain, pt.y - verticalOffset - height, pt.x + width - offsetMain, pt.y - verticalOffset); } else { return PRectangle(pt.x - offsetMain, pt.y + verticalOffset + textHeight, pt.x + width - offsetMain, pt.y + verticalOffset + textHeight + height); } }
int32_t lime_window_get_id (value window) { Window* targetWindow = (Window*)val_data (window); return (int32_t)targetWindow->GetID (); }