"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "layer1/Seq.cpp" between
pymol-v1.8.6.0.tar.bz2 and pymol-v2.1.0.tar.bz2

About: PyMOL is a Python-enhanced molecular graphics tool. It excels at 3D visualization of proteins, small molecules, density, surfaces, and trajectories. It also includes molecular editing, ray tracing, and movies. Open Source version.

Seq.cpp  (pymol-v1.8.6.0.tar.bz2):Seq.cpp  (pymol-v2.1.0.tar.bz2)
skipping to change at line 67 skipping to change at line 67
static int SeqFindRowCol(PyMOLGlobals * G, int x, int y, int *row_num_ptr, static int SeqFindRowCol(PyMOLGlobals * G, int x, int y, int *row_num_ptr,
int *col_num_ptr, int fixed_row) int *col_num_ptr, int fixed_row)
{ {
CSeq *I = G->Seq; CSeq *I = G->Seq;
int result = 0; int result = 0;
int row_num = 0; int row_num = 0;
int col_num = 0; int col_num = 0;
if(I->ScrollBarActive) { if(I->ScrollBarActive) {
y -= I->ScrollBarWidth; y -= DIP2PIXEL(I->ScrollBarWidth);
} }
if(fixed_row >= 0) { if(fixed_row >= 0) {
row_num = fixed_row; row_num = fixed_row;
} else { } else {
row_num = (y - I->Block->rect.bottom) / I->LineHeight; row_num = (y - I->Block->rect.bottom) / DIP2PIXEL(I->LineHeight);
row_num = (I->NRow - 1) - row_num; row_num = (I->NRow - 1) - row_num;
} }
if((row_num >= 0) && (row_num < I->NRow)) { if((row_num >= 0) && (row_num < I->NRow)) {
int char_num; int char_num;
CSeqRow *row; CSeqRow *row;
row = I->Row + row_num; row = I->Row + row_num;
char_num = (x - I->Block->rect.left - I->CharMargin) / I->CharWidth; char_num = (x - I->Block->rect.left - DIP2PIXEL(I->CharMargin)) / DIP2PIXEL( I->CharWidth);
if(row->nCol && !row->label_flag) if(row->nCol && !row->label_flag)
if(char_num < I->VisSize) { if(char_num < I->VisSize) {
char_num += I->NSkip; char_num += I->NSkip;
if((char_num >= 0) && (char_num < row->ext_len) && (row->char2col)) { if((char_num >= 0) && (char_num < row->ext_len) && (row->char2col)) {
col_num = row->char2col[char_num]; col_num = row->char2col[char_num];
if(col_num) { if(col_num) {
col_num--; col_num--;
if(col_num < row->nCol) { if(col_num < row->nCol) {
result = true; result = true;
} else if(fixed_row >= 0) { } else if(fixed_row >= 0) {
skipping to change at line 144 skipping to change at line 144
int a; int a;
I->Size = 0; I->Size = 0;
for(a = 0; a < I->NRow; a++) { for(a = 0; a < I->NRow; a++) {
if(I->Row[a].ext_len > I->Size) if(I->Row[a].ext_len > I->Size)
I->Size = I->Row[a].ext_len; I->Size = I->Row[a].ext_len;
} }
} }
{ {
int extra; int extra;
I->VisSize = (I->Block->rect.right - I->Block->rect.left - 1) / I->CharWidth ; I->VisSize = (I->Block->rect.right - I->Block->rect.left - 1) / DIP2PIXEL(I- >CharWidth);
/* printf("%d %d %d %d %d\n",cw,I->Block->rect.right,I->Block->rect.left, I->VisSize,I->Size); */ /* printf("%d %d %d %d %d\n",cw,I->Block->rect.right,I->Block->rect.left, I->VisSize,I->Size); */
if(I->VisSize < 1) if(I->VisSize < 1)
I->VisSize = 1; I->VisSize = 1;
extra = I->Size - I->VisSize; extra = I->Size - I->VisSize;
if(extra <= 0) { if(extra <= 0) {
I->ScrollBarActive = false; I->ScrollBarActive = false;
} else { } else {
I->ScrollBarActive = true; I->ScrollBarActive = true;
ScrollBarSetLimits(I->ScrollBar, I->Size, I->VisSize); ScrollBarSetLimits(I->ScrollBar, I->Size, I->VisSize);
skipping to change at line 231 skipping to change at line 231
I->LastRow = -1; I->LastRow = -1;
return (1); return (1);
} }
int SeqGetHeight(PyMOLGlobals * G) int SeqGetHeight(PyMOLGlobals * G)
{ {
CSeq *I = G->Seq; CSeq *I = G->Seq;
int height = 0; int height = 0;
if(I->NRow) { if(I->NRow) {
height = 13 * I->NRow + 4; height = DIP2PIXEL(I->LineHeight * I->NRow + 4);
if(I->ScrollBarActive) if(I->ScrollBarActive)
height += I->ScrollBarWidth; height += DIP2PIXEL(I->ScrollBarWidth);
} }
return (height); return (height);
} }
void SeqSetHandler(PyMOLGlobals * G, CSeqHandler * handler) void SeqSetHandler(PyMOLGlobals * G, CSeqHandler * handler)
{ {
CSeq *I = G->Seq; CSeq *I = G->Seq;
I->Handler = handler; I->Handler = handler;
} }
static int SeqClick(Block * block, int button, int x, int y, int mod) static int SeqClick(Block * block, int button, int x, int y, int mod)
{ {
PyMOLGlobals *G = block->G; PyMOLGlobals *G = block->G;
CSeq *I = G->Seq; CSeq *I = G->Seq;
int pass = 0; int pass = 0;
int row_num; int row_num;
int col_num; int col_num;
if(I->ScrollBarActive) { if(I->ScrollBarActive) {
if((y - I->Block->rect.bottom) < I->ScrollBarWidth) { if((y - I->Block->rect.bottom) < DIP2PIXEL(I->ScrollBarWidth)) {
pass = 1; pass = 1;
ScrollBarDoClick(I->ScrollBar, button, x, y, mod); ScrollBarDoClick(I->ScrollBar, button, x, y, mod);
} }
} }
if(!pass) { if(!pass) {
if(SeqFindRowCol(G, x, y, &row_num, &col_num, -1)) { if(SeqFindRowCol(G, x, y, &row_num, &col_num, -1)) {
if(I->Handler) if(I->Handler)
if(I->Handler->fClick) if(I->Handler->fClick)
I->Handler->fClick(G, I->Row, button, row_num, col_num, mod, x, y); I->Handler->fClick(G, I->Row, button, row_num, col_num, mod, x, y);
I->DragFlag = true; I->DragFlag = true;
I->LastRow = row_num; I->LastRow = row_num;
OrthoDirty(G); OrthoDirty(G);
} else { } else {
switch (button) { switch (button) {
case P_GLUT_RIGHT_BUTTON: case P_GLUT_RIGHT_BUTTON:
{ {
ObjectNameType name; ObjectNameType name;
if(ExecutiveGetActiveSeleName(G, name, false, false)) { if(ExecutiveGetActiveSeleName(G, name, false, false)) {
MenuActivate2Arg(G, x, y + 20, x, y, false, "pick_sele", name, name) ; MenuActivate2Arg(G, x, y + DIP2PIXEL(20), x, y, false, "pick_sele", name, name);
} }
} }
break; break;
case P_GLUT_LEFT_BUTTON: case P_GLUT_LEFT_BUTTON:
if(I->Handler) if(I->Handler)
if(I->Handler->fClick) if(I->Handler->fClick)
I->Handler->fClick(G, I->Row, button, -1, -1, mod, x, y); I->Handler->fClick(G, I->Row, button, -1, -1, mod, x, y);
break; break;
} }
} }
skipping to change at line 294 skipping to change at line 294
} }
static void SeqDraw(Block * block ORTHOCGOARG) static void SeqDraw(Block * block ORTHOCGOARG)
{ {
PyMOLGlobals *G = block->G; PyMOLGlobals *G = block->G;
CSeq *I = G->Seq; CSeq *I = G->Seq;
if(G->HaveGUI && G->ValidContext) { if(G->HaveGUI && G->ValidContext) {
int x = I->Block->rect.left; int x = I->Block->rect.left;
int y = I->Block->rect.bottom + I->ScrollBarMargin + 1; int y = I->Block->rect.bottom + DIP2PIXEL(I->ScrollBarMargin) + 1;
float bg_color[3] = { 0.f, 0.f, 0.f }, overlay_color[3] = { 1.0F, 1.0F, 1.0F }; float bg_color[3] = { 0.f, 0.f, 0.f }, overlay_color[3] = { 1.0F, 1.0F, 1.0F };
int label_color_index = SettingGetGlobal_color(G, cSetting_seq_view_label_co lor); int label_color_index = SettingGetGlobal_color(G, cSetting_seq_view_label_co lor);
float *label_color = ColorGet(G, label_color_index); float *label_color = ColorGet(G, label_color_index);
copy3f(label_color, overlay_color); copy3f(label_color, overlay_color);
if (SettingGetGlobal_b(G, cSetting_bg_gradient)){ if (SettingGetGlobal_b(G, cSetting_bg_gradient)){
if(SettingGetGlobal_b(G, cSetting_seq_view_location)) { if(SettingGetGlobal_b(G, cSetting_seq_view_location)) {
copy3f(ColorGet(G, SettingGetGlobal_color(G, cSetting_bg_rgb_bottom)), bg _color); copy3f(ColorGet(G, SettingGetGlobal_color(G, cSetting_bg_rgb_bottom)), bg _color);
} else { } else {
copy3f(ColorGet(G, SettingGetGlobal_color(G, cSetting_bg_rgb_top)), bg_co lor); copy3f(ColorGet(G, SettingGetGlobal_color(G, cSetting_bg_rgb_top)), bg_co lor);
skipping to change at line 318 skipping to change at line 318
} }
if(!SettingGetGlobal_b(G, cSetting_seq_view_overlay)) { if(!SettingGetGlobal_b(G, cSetting_seq_view_overlay)) {
if (orthoCGO){ if (orthoCGO){
CGOColorv(orthoCGO, bg_color); CGOColorv(orthoCGO, bg_color);
} else { } else {
glColor3fv(bg_color); glColor3fv(bg_color);
} }
BlockFill(I->Block ORTHOCGOARGVAR); BlockFill(I->Block ORTHOCGOARGVAR);
} }
if(I->ScrollBarActive) { if(I->ScrollBarActive) {
ScrollBarSetBox(I->ScrollBar, I->Block->rect.bottom + I->ScrollBarWidth, ScrollBarSetBox(I->ScrollBar, I->Block->rect.bottom + DIP2PIXEL(I->ScrollB
I->Block->rect.left + I->ScrollBarMargin, arWidth),
I->Block->rect.bottom + 2, I->Block->rect.left + DIP2PIXEL(I->ScrollBarMargin),
I->Block->rect.right - I->ScrollBarMargin); I->Block->rect.bottom + DIP2PIXEL(2),
I->Block->rect.right - DIP2PIXEL(I->ScrollBarMargin));
ScrollBarDoDraw(I->ScrollBar ORTHOCGOARGVAR); ScrollBarDoDraw(I->ScrollBar ORTHOCGOARGVAR);
y += I->ScrollBarWidth; y += DIP2PIXEL(I->ScrollBarWidth);
I->NSkip = (int) ScrollBarGetValue(I->ScrollBar); I->NSkip = (int) ScrollBarGetValue(I->ScrollBar);
} else { } else {
I->NSkip = 0; I->NSkip = 0;
} }
if(I->NRow) { /* get current sequence sizes */ if(I->NRow) { /* get current sequence sizes */
int a, b; int a, b;
float black[3] = { 0, 0, 0 }; float black[3] = { 0, 0, 0 };
float blue[3] = { 0.5, 0.5, 1.0 }; float blue[3] = { 0.5, 0.5, 1.0 };
float *cur_color; float *cur_color;
CSeqRow *row; CSeqRow *row;
skipping to change at line 397 skipping to change at line 397
cur_color = overlay_color; cur_color = overlay_color;
TextSetColor(G, cur_color); TextSetColor(G, cur_color);
for(a = I->NRow - 1; a >= 0; a--) { for(a = I->NRow - 1; a >= 0; a--) {
row = I->Row + a; row = I->Row + a;
yy = y1 - 2; yy = y1 - 2;
col = row->col; col = row->col;
if((row->label_flag || row->column_label_flag) && row->nCol) { if((row->label_flag || row->column_label_flag) && row->nCol) {
row->title_width = col->offset + (col->stop - col->start); row->title_width = col->offset + (col->stop - col->start);
xx = xx =
x + I->CharMargin + I->CharWidth * (col->offset + x + DIP2PIXEL(I->CharMargin) + DIP2PIXEL(I->CharWidth) * (col->offse t +
(max_title_width - row->title_wi dth)); (max_title_width - row->title_wi dth));
ch_wid = (col->stop - col->start); ch_wid = (col->stop - col->start);
pix_wid = I->CharWidth * ch_wid; pix_wid = DIP2PIXEL(I->CharWidth * ch_wid);
tot_len = col->offset + ch_wid - I->NSkip; tot_len = col->offset + ch_wid - I->NSkip;
if(tot_len <= vis_size) { if(tot_len <= vis_size) {
TextDrawSubStrFast(G, row->txt, xx, y1, col->start, ch_wid ORTHOCGOA RGVAR); TextDrawSubStrFast(G, row->txt, xx, y1, col->start, ch_wid ORTHOCGOA RGVAR);
} }
} }
y1 += I->LineHeight; y1 += DIP2PIXEL(I->LineHeight);
} }
y1 = y; y1 = y;
for(a = I->NRow - 1; a >= 0; a--) { for(a = I->NRow - 1; a >= 0; a--) {
row = I->Row + a; row = I->Row + a;
cur_color = overlay_color; cur_color = overlay_color;
if (orthoCGO){ if (orthoCGO){
CGOColorv(orthoCGO, cur_color); CGOColorv(orthoCGO, cur_color);
} else { } else {
glColor3fv(cur_color); glColor3fv(cur_color);
skipping to change at line 438 skipping to change at line 438
} else } else
first_allowed = I->NSkip; first_allowed = I->NSkip;
for(b = 1; b < row->nCol; b++) { for(b = 1; b < row->nCol; b++) {
if(row->label_flag && (b > 1)) if(row->label_flag && (b > 1))
first_allowed = I->NSkip + max_title_width + 1; first_allowed = I->NSkip + max_title_width + 1;
col = row->col + b; col = row->col + b;
if(col->offset >= first_allowed) { if(col->offset >= first_allowed) {
xx = x + I->CharMargin + I->CharWidth * (col->offset - I->NSkip); xx = x + DIP2PIXEL(I->CharMargin) + DIP2PIXEL(I->CharWidth) * (col-> offset - I->NSkip);
ch_wid = (col->stop - col->start); ch_wid = (col->stop - col->start);
pix_wid = I->CharWidth * ch_wid; pix_wid = DIP2PIXEL(I->CharWidth * ch_wid);
tot_len = col->offset + ch_wid - I->NSkip; tot_len = col->offset + ch_wid - I->NSkip;
if(tot_len <= vis_size) { if(tot_len <= vis_size) {
if(row->label_flag) { if(row->label_flag) {
TextSetColor(G, cur_color); TextSetColor(G, cur_color);
if (orthoCGO){ if (orthoCGO){
CGOColorv(orthoCGO, cur_color); CGOColorv(orthoCGO, cur_color);
} else { } else {
glColor3fv(cur_color); glColor3fv(cur_color);
} }
} else if(col->unaligned && unaligned_color) { } else if(col->unaligned && unaligned_color) {
skipping to change at line 496 skipping to change at line 496
if (orthoCGO){ if (orthoCGO){
CGOColorv(orthoCGO, v); CGOColorv(orthoCGO, v);
} else { } else {
glColor3fv(v); glColor3fv(v);
} }
} }
if(col->inverse) { if(col->inverse) {
if (orthoCGO){ if (orthoCGO){
CGOBegin(orthoCGO, GL_TRIANGLE_STRIP); CGOBegin(orthoCGO, GL_TRIANGLE_STRIP);
CGOVertex(orthoCGO, xx, yy, 0.f); CGOVertex(orthoCGO, xx, yy, 0.f);
CGOVertex(orthoCGO, xx, yy + I->LineHeight - 1, 0.f); CGOVertex(orthoCGO, xx, yy + DIP2PIXEL(I->LineHeight) - 1, 0.f) ;
CGOVertex(orthoCGO, xx + pix_wid, yy, 0.f); CGOVertex(orthoCGO, xx + pix_wid, yy, 0.f);
CGOVertex(orthoCGO, xx + pix_wid, yy + I->LineHeight - 1, 0.f); CGOVertex(orthoCGO, xx + pix_wid, yy + DIP2PIXEL(I->LineHeight) - 1, 0.f);
CGOEnd(orthoCGO); CGOEnd(orthoCGO);
} else { } else {
glBegin(GL_POLYGON); glBegin(GL_POLYGON);
glVertex2i(xx, yy); glVertex2i(xx, yy);
glVertex2i(xx, yy + I->LineHeight - 1); glVertex2i(xx, yy + DIP2PIXEL(I->LineHeight) - 1);
glVertex2i(xx + pix_wid, yy + I->LineHeight - 1); glVertex2i(xx + pix_wid, yy + DIP2PIXEL(I->LineHeight) - 1);
glVertex2i(xx + pix_wid, yy); glVertex2i(xx + pix_wid, yy);
glEnd(); glEnd();
} }
TextSetColor(G, black); TextSetColor(G, black);
} }
TextDrawSubStrFast(G, row->txt, xx, y1, col->start, ch_wid ORTHOCG OARGVAR); TextDrawSubStrFast(G, row->txt, xx, y1, col->start, ch_wid ORTHOCG OARGVAR);
} }
} }
} }
if(fill_char) { if(fill_char) {
TextSetColor(G, fill_color); TextSetColor(G, fill_color);
for(b = 0; b < row->nFill; b++) { for(b = 0; b < row->nFill; b++) {
col = row->fill + b; col = row->fill + b;
if(col->offset >= first_allowed) { if(col->offset >= first_allowed) {
xx = x + I->CharMargin + I->CharWidth * (col->offset - I->NSkip); xx = x + DIP2PIXEL(I->CharMargin) + DIP2PIXEL(I->CharWidth) * (col ->offset - I->NSkip);
ch_wid = (col->stop - col->start); ch_wid = (col->stop - col->start);
pix_wid = I->CharWidth * ch_wid; pix_wid = DIP2PIXEL(I->CharWidth * ch_wid);
tot_len = col->offset + ch_wid - I->NSkip; tot_len = col->offset + ch_wid - I->NSkip;
if(tot_len <= vis_size) { if(tot_len <= vis_size) {
TextDrawCharRepeat(G, fill_char, xx, y1, col->start, ch_wid ORTH OCGOARGVAR); TextDrawCharRepeat(G, fill_char, xx, y1, col->start, ch_wid ORTH OCGOARGVAR);
} }
} }
} }
} }
y1 += I->LineHeight; y1 += DIP2PIXEL(I->LineHeight);
} }
if(I->Handler->box_active) { if(I->Handler->box_active) {
int box_row = I->Handler->box_row; int box_row = I->Handler->box_row;
if((box_row >= 0) && (box_row < I->NRow)) { if((box_row >= 0) && (box_row < I->NRow)) {
int start_col = I->Handler->box_start_col; int start_col = I->Handler->box_start_col;
int stop_col = I->Handler->box_stop_col; int stop_col = I->Handler->box_stop_col;
if(start_col > stop_col) { if(start_col > stop_col) {
int tmp = stop_col; int tmp = stop_col;
stop_col = start_col; stop_col = start_col;
skipping to change at line 565 skipping to change at line 565
/* trim spacers (if any) */ /* trim spacers (if any) */
while(col->spacer && (start_col < stop_col)) { while(col->spacer && (start_col < stop_col)) {
start_col++; start_col++;
col = row->col + start_col; col = row->col + start_col;
} }
while(col2->spacer && (start_col < stop_col)) { while(col2->spacer && (start_col < stop_col)) {
stop_col--; stop_col--;
col2 = row->col + stop_col; col2 = row->col + stop_col;
} }
yy = y + ((I->NRow - 1) - box_row) * I->LineHeight - 2; yy = y + ((I->NRow - 1) - box_row) * DIP2PIXEL(I->LineHeight) - 2;
xx = x + I->CharMargin + I->CharWidth * (col->offset - I->NSkip); xx = x + DIP2PIXEL(I->CharMargin) + DIP2PIXEL(I->CharWidth) * (col->
offset - I->NSkip);
xx2 = xx2 =
x + I->CharMargin + I->CharWidth * (col2->offset + x + DIP2PIXEL(I->CharMargin) + DIP2PIXEL(I->CharWidth) * (col2->of fset +
(col2->stop - col2->start) - I ->NSkip); (col2->stop - col2->start) - I ->NSkip);
if (orthoCGO){ if (orthoCGO){
CGOColorv(orthoCGO, overlay_color); CGOColorv(orthoCGO, overlay_color);
CGOLineAsTriangleStrips(orthoCGO, xx, yy, xx2, yy + I->LineHeight - 2); CGOLineAsTriangleStrips(orthoCGO, xx, yy, xx2, yy + DIP2PIXEL(I->Li neHeight) - 2);
/* TODO: need to convert to triangles /* TODO: need to convert to triangles
CGOBegin(orthoCGO, GL_LINE_LOOP); CGOBegin(orthoCGO, GL_LINE_LOOP);
CGOVertex(orthoCGO, xx, yy); CGOVertex(orthoCGO, xx, yy);
CGOVertex(orthoCGO, xx, yy + I->LineHeight - 2); CGOVertex(orthoCGO, xx, yy + I->LineHeight - 2);
CGOVertex(orthoCGO, xx2, yy + I->LineHeight - 2); CGOVertex(orthoCGO, xx2, yy + I->LineHeight - 2);
CGOVertex(orthoCGO, xx2, yy); CGOVertex(orthoCGO, xx2, yy);
CGOEnd(orthoCGO);*/ CGOEnd(orthoCGO);*/
} else { } else {
glBegin(GL_LINE_LOOP); glBegin(GL_LINE_LOOP);
glVertex2i(xx, yy); glVertex2i(xx, yy);
glVertex2i(xx, yy + I->LineHeight - 2); glVertex2i(xx, yy + DIP2PIXEL(I->LineHeight) - 2);
glVertex2i(xx2, yy + I->LineHeight - 2); glVertex2i(xx2, yy + DIP2PIXEL(I->LineHeight) - 2);
glVertex2i(xx2, yy); glVertex2i(xx2, yy);
glEnd(); glEnd();
} }
} }
} }
} }
if(I->ScrollBarActive) { if(I->ScrollBarActive) {
int real_count = n_real; int real_count = n_real;
int mode = 0; int mode = 0;
float width = (float) (I->Block->rect.right - I->Block->rect.left); float width = (float) (I->Block->rect.right - I->Block->rect.left);
float start = 0, stop; float start = 0, stop;
int right = 0; int right = 0;
float bot, top, cent; float bot, top, cent;
float height = (float) (I->ScrollBarWidth - I->ScrollBarMargin); float height = (float) DIP2PIXEL(I->ScrollBarWidth - I->ScrollBarMargin) ;
int last_color = -1; int last_color = -1;
cur_color = blue; cur_color = blue;
for(a = 0; a < I->NRow; a++) { for(a = 0; a < I->NRow; a++) {
row = I->Row + a; row = I->Row + a;
if(!row->label_flag) { if(!row->label_flag) {
top = top =
I->Block->rect.bottom + I->ScrollBarMargin + (height * real_count) / n_real; I->Block->rect.bottom + DIP2PIXEL(I->ScrollBarMargin) + (height * real_count) / n_real;
real_count--; real_count--;
bot = bot =
I->Block->rect.bottom + I->ScrollBarMargin + (height * real_count) / n_real; I->Block->rect.bottom + DIP2PIXEL(I->ScrollBarMargin) + (height * real_count) / n_real;
mode = 0; mode = 0;
for(b = 0; b < row->nCol; b++) { for(b = 0; b < row->nCol; b++) {
col = row->col + b; col = row->col + b;
if(col->inverse && (!mode)) { if(col->inverse && (!mode)) {
start = (width * col->offset) / max_len; start = (width * col->offset) / max_len;
right = col->offset + (col->stop - col->start); right = col->offset + (col->stop - col->start);
mode = 1; mode = 1;
last_color = col->color; last_color = col->color;
if(row->label_flag) if(row->label_flag)
cur_color = overlay_color; cur_color = overlay_color;
 End of changes. 29 change blocks. 
35 lines changed or deleted 37 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)